k8s 上如何跑 Dolphins 模型

接着上一篇的介绍,这一篇就来跑跑 Dolphins 模型,本篇会记录,跑模型常见的阬点。

1 在 k8s 上创建 pod

将外部数据挂载在 pod 里,并申请 gpu 资源。同时修改代码里对应的引入数据的路径

# dolphins.yaml
apiVersion: v1
kind: Pod
metadata:name: czl-test-pod-dolphinslabels:app: czl-dolphins
spec:containers:- name: czl-1-containerimage: harbor.yoocar.com.cn/deeplearning/pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel#imagePullPolicy: Alwayscommand: ['sh', '-c', 'sleep infinity;']resources:limits:nvidia.com/gpu: 1requests:nvidia.com/gpu: 1volumeMounts:- name: datamountPath: /mount/bev- name: dshmmountPath: /dev/shmvolumes:- name: datahostPath:path: "/root/data/pjp/dolphins"type: Directory- name: dshmemptyDir:medium: MemorysizeLimit: 1000GirestartPolicy: Never

用 yaml 方式创建 pod

kebuctl apply -f dolphins.yaml

2 去 github 下载 Dolphins

https://github.com/SaFoLab-WISC/Dolphins/tree/main

2.1 修改源码——依赖包

这里为了避免一些报错,例如重复的依赖。

ERROR: Cannot install einops==0.6.1 and einops==0.7.0 because these package versions have conflicting dependencies.

直接修改依赖包,requirement.txt

# 更新依赖后的requirements.txt,指定了一些版本
open_clip_torch==2.16.0
opencv_python_headless==4.5.5.64
#einops==0.6.1
einops_exts==0.0.4
transformers==4.28.1
accelerate==0.31.0
deepspeed==0.9.3
huggingface_hub
inflection==0.5.1
nltk==3.8.1
numpy==1.23.5
#torch==2.0.0
#torchvision==0.15.1
tqdm==4.65.0
fastapi>=0.95.2
gradio==3.34
braceexpand==0.1.7
einops==0.7.0
fastapi==0.104.1
#horovod==0.27.0
huggingface_hub==0.14.0
ijson==3.2.3
importlib_metadata==6.6.0
inflection==0.5.1
markdown2==2.4.8
natsort==8.4.0
nltk==3.8.1
#numpy==1.26.2
openai==1.3.7
orjson==3.9.10
packaging==23.2
Pillow==10.1.0
pycocoevalcap==1.2
pycocotools==2.0.7
Requests==2.31.0
uvicorn==0.24.0.post1
webdataset==0.2.79
wandb
datasets
mmengine
peft
pandas
h5py
# https://github.com/gradio-app/gradio/issues/4306
httpx==0.24.1

2.2 修改源码——数据引入路径

正常情况下,load_pretrained_modoel 会从 huggingface 里去下载数据。如果无法下载那么只能自己从网络上搬运了。我这里是统一存放,并挂载到了 pod 的 /mount/bev/ 路径里。找到的数据如下所示
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

修改源代码里的数据引入路径,如下修改地址的注释

def load_pretrained_modoel():peft_config, peft_model_id = None, Nonepeft_config = LoraConfig(**openflamingo_tuning_config)model, image_processor, tokenizer = create_model_and_transforms(clip_vision_encoder_path="ViT-L-14-336",clip_vision_encoder_pretrained="openai",clip_vision_encoder_cache_dir="/mount/bev/clip", # 修改地址,添加 clip_vision 的缓存路径,那么他会在这个路径里去查找 ViT-L-14-336 模型lang_encoder_path="/mount/bev/anas-awadalla/mpt-7b", # 修改地址 anas-awadalla/mpt-7btokenizer_path="/mount/bev/anas-awadalla/mpt-7b",  #  修改地址 anas-awadalla/mpt-7bcross_attn_every_n_layers=4,use_peft=True,peft_config=peft_config,)checkpoint_path ="/mount/bev/huggingface/gray311/Dolphins/checkpoint.pt"  #  修改地址model.load_state_dict(torch.load(checkpoint_path), strict=False)model.half().cuda()return model, image_processor, tokenizer

3 从本地将代码上传到 k8s 的 pod 里

这里需要自行研究下,如何在本地通过 cmd 连接远程 k8s。这样就可以在本地执行下面的命令。

kubectl cp Dolphins-main czl-test-pod-dolphins:/workspace/Dolphins-main -n test

4 进入 pod,开始安装依赖,跑模型

kubectl exec -it czl-test-pod-dolphins -n test -- bash
pip install -r requirement.txt
python inference.py

到这里就会开始一系列的报错了

5 处理一系列报错问题

报错1:
在这里插入图片描述
解决1:切换安装源

pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/

报错2:
在这里插入图片描述
解决2:
安装 ffmpeg libsm6 libxext6

apt-get install ffmpeg libsm6 libxext6  -y

此时还没解决就又报错了,没报错的可以跳过下一步
在这里插入图片描述
那么

apt update
apt-get install software-properties-common

然后再安装

apt-get install ffmpeg libsm6 libxext6  -y

6 结果展示

方式一:
在这里插入图片描述

在这里插入图片描述

方式二:
在这里插入图片描述
这里需要开通 k8s 对外访问的服务,我这里对外暴露的端口号为 30066

# service.yaml
apiVersion: v1
kind: Service
metadata:name: czl-dolphins-svc
spec:selector:app: czl-dolphinstype: NodePortports:- protocol: TCPport: 7862targetPort: 7862nodePort: 30066

创建服务:

kubectl apply -f service.yaml -n test

接下来一系列的启动命令

python -m serve.controller --host 0.0.0.0 --port 10000

在这里插入图片描述

CUDA_VISIBLE_DEVICES=0 python -m serve.model_worker --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model_name dolphins --use_lora --num_gpus 1 --limit_model_concurrency 200

在这里插入图片描述

python -m serve.gradio_web_server_video --controller http://localhost:10000 --port 7862 --host 0.0.0.0 --share

这个命令记得加上 --host 0.0.0.0

在这里插入图片描述

这个时候,集群地址加上,创建 service.yaml 对外暴露的端口号,即可打开 Dolphins web 页面。如果页面不长这样,那么可能是 gradio 依赖包的版本不对。我这里的是 3.34.0 版本,其他版本都会报错,或者展示的 web 界面有问题。

在这里插入图片描述

7 总结

跑模型,要注意机子本身是否能跑模型,是否需要 gpu 资源,可能还要注意下可以支持的显存大小。

流程:

  • github 上下载模型源码
  • 数据准备:找用到的数据,和源码放在一起,修改引入路径
  • 跑模型:安装依赖,跑模型 github 启动命令
  • 解决一系列的报错:包括环境、依赖包。甚至看源码,修改源码。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59379.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MySQL数据表导入到clickhouse数据库中

前言:研发需求,需要把MySQL数据导入到clickhouse中来测试计算性能是否提升。 从MySQL导入到clickhouse需要两个工具 NavicatDBeaver 导出MySQL数据 连接上MySQL>选择数据库>选择数据表 选择csv格式 导出数据 下面全部默认即可 开始导出 …

Spring Boot 与 Vue 共筑二手书籍交易卓越平台

作者介绍:✌️大厂全栈码农|毕设实战开发,专注于大学生项目实战开发、讲解和毕业答疑辅导。 🍅获取源码联系方式请查看文末🍅 推荐订阅精彩专栏 👇🏻 避免错过下次更新 Springboot项目精选实战案例 更多项目…

零基础Java第十三期:继承与多态(一)

目录 一、继承 1.1. 继承的目的 1.2. 继承的概念 1.3. 继承的语法 1.4. 父类的访问 1.5. 继承中的重载与重写 1.6. 子类的构造方法 1.7. 再谈初始化 一、继承 1.1. 继承的目的 我们来定义一个Dog和Cat的类: public class Dog {public int age;public Strin…

ES + SkyWalking + Spring Boot:日志分析与服务监控(三)

目录 一、搭建SkyWalking 1.1 版本选择 1.2 下载安装 1.3 配置启动 1.4 SkyWalking UI介绍 二、Springboot项目使用 2.1 Agent下载 2.2 Agent配置skywalking oap地址 2.3 IDEA配置Agent地址 2.4 生成的ES索引介绍 三、在kibana上查看日志 四、问题和解决 3.1 日志…

MySQL45讲 第十三讲 为什么表数据删掉一半,表文件大小不变?

文章目录 MySQL45讲 第十二讲 为什么表数据删掉一半,表文件大小不变?一、引言二、InnoDB 表数据存储方式三、数据删除流程及表空间未回收原因四、重建表以回收表空间五、Online 与 inplace 概念区别六、总结 MySQL45讲 第十二讲 为什么表数据删掉一半&am…

2024年前三季度币安、OKX等五大交易所上币表现分析

随着加密市场竞争的加剧,头部交易所逐渐在上币策略、代币选择、交易活跃度等方面采取了不同的应对策略。Animoca Digital Research近期发布的一份报告,通过对币安、OKX、Bitget、KuCoin和Bybit五大交易所2024年前三季度的上币情况进行了详细分析。本文将…

docker镜像仓库常用命令

docker镜像仓库常用命令 docker logindocker logoutdocker pulldocker pushdocker searchdocker imagesdocker image inspectdocker tagdocker rmidocker image prune docker login 语法: docker login [options] [server] 功能:登录到一个存放docker镜像的仓库&am…

Qt聊天室项目

目录 项目要求 项目背景 技术分析 架构设计 服务器架构 模块划分 模块之间的交互 客户端架构 模块划分 模块之间交互 项目展示 项目实现 服务器 ui server.pro dialog.h dialog.cpp 客户端 ui cient.pro dialog.h dialog.cpp 打包步骤不做演示 视频演示 项目…

MATLAB实现图像恢复设计报告

设计目标及需求分析 设计目标:希望通过matlab设计一个软件来实现对CT图像的模糊再恢复的过程,是对现实中CT图像复原的一个简单仿真。 需求分析:随着网络和通信技术的发展,数字图像处理与分析技术已经在科学研究、工业生产、医疗…

Python毕业设计选题:基于django+vue的4S店客户管理系统

开发语言:Python框架:djangoPython版本:python3.7.7数据库:mysql 5.7数据库工具:Navicat11开发软件:PyCharm 系统展示 管理员登录 员工信息管理 个人中心 车辆信息管理 售后服务管理 售后安排管理 车辆信…

Java基础06(代码运行时的内存图)

目录 一、引入 二、Java下的内存分配 1.类信息常量池和静态常量池 2. 栈和字符串常量池 (引进)线程 3.⭐程序计数器作用⭐(程序计数器配合栈使用) 总结Java内存: (引进)驱动 三、引用传…

论文阅读-用于点云分析的自组织网络

目前存在的问题: 原始的SOM(1)训练结果与初始节点高度相关(2)样本更新规则取决于输入点的顺序3D 卷积神经网络(需要将数据转换为体素,存在分辨率损失和计算成本上涨的问题)、PointN…

数据结构之二叉树前序,中序,后序习题分析(递归图)

1.比较相同的树 二叉树不能轻易用断言,因为树一定有空 2.找结点值 3.单值二叉树 4.对称二叉树 5.前序遍历

【JavaScript】JavaScript开篇基础(4)

1.❤️❤️前言~🥳🎉🎉🎉 Hello, Hello~ 亲爱的朋友们👋👋,这里是E绵绵呀✍️✍️。 如果你喜欢这篇文章,请别吝啬你的点赞❤️❤️和收藏📖📖。如果你对我的…

运动控制 直流有刷电机

文章目录 一、简介二、组成三、特点四、电机参数4.1 额定电压4.2 额定电流4.3 额定转速4.4 额定扭矩4.5 减速比 五、工作原理5.1 左手定则5.2 工作原理 六、测速原理6.1 磁电式编码器6.2 光电式编码器 一、简介 直流有刷电机是一种内含电刷装置能将直流电转换为机械能的电机&a…

关于模拟方法建模的一份介绍

有些时候,我们无法直接收集大量数据,即对于对象的行为直接观测或重复实验可能是不行的,所以此时就需要通过模拟的技术来收集数据,然后建模。这样的一种策略就是模拟方法建模,而模拟方法建模中最常用的一种方法就是蒙特…

Java 入门

目录 Java简介 Java JDK开发环境配置 第一个Java程序 Java标识符与关键字 Java注释 Java常量 Java变量的定义和使用 Java简介 Java简介: Java是由Sun Microsystems公司于1995年推出的一门面向对象的高级程序设计语言,可以运行于多个平台,其…

CSS--两列网页布局,三列布局和多行多列布局

两列网页布局 两列网页布局实验 先将一个未运用浮动效果的网页结构写出来 <style>header{/* 给页眉设置宽高和样式 */width:1000px;height: 40px;background-color: gray;border: 3px brown solid;margin-bottom: 5px;}article{width:1000px;height: 600px;background-c…

开源与商业的碰撞TPFLOW与Gadmin低代码的商业合作

随着数字化转型的浪潮席卷全球&#xff0c;企业对于高效、灵活的软件开发需求愈发迫切。低代码开发平台应运而生&#xff0c;为企业提供了简化开发流程、缩短开发周期的解决方案。在众多低代码开发平台中&#xff0c;Gadmin企业级低代码平台、TPFLOW工作流和SFDP超级表单脱颖而…

Edge浏览器提示“无法安全下载”

Edge浏览器在下载某些文件时&#xff0c;会提示“无法安全下载”。 注意事项&#xff1a;如果确实需要下载该文件&#xff0c;首先核对网址&#xff0c;确保下载文件的安全性&#xff0c;并在下载完成后进行必要的病毒查杀。 解决方法&#xff1a; 点击右侧的3个点&#xff0…