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.rhkb.cn/news/466684.html

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

相关文章

CentOS 7 更换软件仓库

CentOS 7 于2024年6月30日停止维护,官方仓库已经没有软件了,想要继续使用 ,需要更换软件仓库,这里更换到阿里云的软件仓库 https://developer.aliyun.com/mirror/ 查看目前可用的软件数量 yum repolist 更换软件仓库&#xff1a…

初学者指南:用例图——开启您的软件工程之旅

目录 背景: 基本组成: 关联(Assciation): 包含(Include): 扩展(Extend): 泛化(Inheritance): 完整银行…

单位正交矢量的参数化,用于特征矢量对厄尔米特矩阵对角化使用

​ 首先α β 在0-pi/2内,这样就可以取值0-1,满足了单位化的要求 每个向量的模由α和β定义,αβ定义模的时候只限制在0–pi/2,由画图可知不可正交 为了验证矩阵 U 3 \boldsymbol{U}_3 U3​ 的第一列和第二列是否正交&#xff…

Spring Security 框架篇-深入了解 Spring Security 的授权核心功能(RBAC 权限模型、自定义异常处理器、校验权限方法)

🔥博客主页: 【小扳_-CSDN博客】 ❤感谢大家点赞👍收藏⭐评论✍ 文章目录 1.0 权限系统 1.1 引入 1.2 RBAC 权限模型 1.3 数据库设计 2.0 Spring Security 核心功能-授权 2.1 思路分析 2.2 编写 SQL 语句 2.3 将用户权限进行封装 2.4 获取用户…

使用 API 和离线库查询 IP 地址方法详解

目录 一、IP 地址查询能获取哪些信息1.地理位置信息2.网络信息3.网络类型 二、IP 地址查询方法,附代码1.在线查询 IP 地址方法2.使用 API 进行 IP 地址查询3.使用离线库进行 IP 地址查询 互联网监管部门要求公开 IP 归属地,引起了很大热度,但…

微服务day02

教学文档: 黑马教学文档 Docker Docker的安装 镜像和容器 命令解读 常见命令 案例 查看DockerHub,拉取Nginx镜像,创建并运行容器 搜索Nginx镜像:在 www.hub.docker.com 网站进行查询 拉取镜像: docker pull ngin…

一个小程序如何对接多个收款账户?

背景 我又来了,之前对接过网约巴士系统 网约巴士旅游专线平台搭建历程,运营了两年多了。在运营中完善、在完善中学习,一直是不变的真理。有一句话说得好:先做一个垃圾、用起来再说。 今天又需要升级了,需求是&#…

基于航片的玉米异常情况识别赛题正在报名中 | CCF BDCI进行时

一年一度的行业盛事2024 CCF大数据与计算智能大赛(简称2024 CCF BDCI)又在激烈进行中啦 多个赛题等你挑战,还没有报名的伙伴们抓紧时间咯,叫上你伙伴练起来吧! 2024 CCF大数据与计算智能大赛 CCF大数据与计算智能大…

面试题:Spring(一)

1. Spring框架中bean是单例么? Service Scope("singleton") public class UserServiceImpl implements UserService { }singleton : bean在每个Spring IOC容器中只有一个实例。prototype:一个bean的定义可以有多个实例。 2. Spring框架中的…

Android View事件分发

目录 1.什么是View事件分发? 2.事件的类型 3.事件的发生 4.事件分发的方法 4.1 dispatchTouchEvent() 4.2 onTouchEvent() 4.3 onInterceptTouchEvent() 5.滑动冲突 5.1 外部拦截法 5.2内部拦截法 6.onTouch的执行高于onClick 7. onTouch()和onTouchEve…

uniapp 实现瀑布流

效果演示 组件下载 瀑布流布局-waterfall - DCloud 插件市场

6.qsqlquerymodel源码分析

目录 继承关系入口浅析qsqlquery刷新数据 扩展列或者移除列以及取别名读取数据与增减行读取数据 下一章节:如何使用qsqlquerymodel 与 qtableview实现自定义表格 继承关系 qsqlquerymodel 继承与qabstracttablemodel 入口 负责填充数据 void QSqlQueryModel::s…

Vue3中使用LogicFlow实现简单流程图

实现结果 实现功能&#xff1a; 拖拽创建节点自定义节点/边自定义快捷键人员选择弹窗右侧动态配置组件配置项获取/回显必填项验证历史记录&#xff08;撤销/恢复&#xff09; 自定义节点与拖拽创建节点 拖拽节点面板node-panel.vue <template><div class"node-…

Devops业务价值流:软件研发最佳实践

在当今快速迭代的软件开发环境中&#xff0c;DevOps业务价值流已成为推动软件研发高效与质量并重的关键实践。软件研发阶段作为产品生命周期的核心环节&#xff0c;其每一步都承载着将创意转化为现实的重要使命。在历经需求澄清的精准定位、架构设计的宏观规划以及项目初始化的…

wireshark工具使用

复制数据 1.右键展开整帧数据 2.复制“所有可见项目” mark标记数据 标记&#xff1a; 跳转&#xff1a; 保存成文件&#xff1a; 文件–>导出特定分组—>Marked packets only

管理 Elasticsearch 变得更容易了,非常容易!

作者&#xff1a;来自 Elastic Ken Exner Elasticsearch 用户&#xff0c;我们听到了你的心声。管理 Elasticsearch 有时会变得很复杂&#xff0c;面临的挑战包括性能调整、问题检测和资源优化。我们一直致力于简化你的体验。今天&#xff0c;我们宣布了自收购 Opster 以来的一…

深度洞察| 超6亿银发精准流量,40+泛银发群体参与消费三大变化

作者 | NewAgingPro团队 前言 9月24日&#xff0c;AgeClub成立银发流量及场景联盟&#xff08;简称&#xff1a;AgeMCN&#xff09;&#xff0c;助力银发经济高质量发展。 10月11日&#xff0c;AgeClub发布《2024银发流量全景洞察报告》&#xff0c;探索银发流量发展新模式…

Spring Boot——日志介绍和配置

1. 日志的介绍 在前面的学习中&#xff0c;控制台上打印出来的一大堆内容就是日志&#xff0c;可以帮助我们发现问题&#xff0c;分析问题&#xff0c;定位问题&#xff0c;除此之外&#xff0c;日志还可以进行系统的监控&#xff0c;数据采集等 2. 日志的使用 在程序中获取日…

Redis 组网方式入门

文章目录 一、组网方式1. 单实例模式描述优点缺点适用场景 2. 主从复制模式&#xff08;Master-Slave Replication&#xff09;描述优点缺点适用场景基于docker的redis主从复制1. 配置主节点2. 配置从节点3. 查看节点状态4. 验证主从数据同步5. 查看同步进度 3. 哨兵模式&#…

信号-2-信号捕捉

相关概念&#xff1a;递达 未决 / 阻塞 忽略 阻塞 vs 忽略 阻塞&#xff1a; 如果指定信号信号被阻塞&#xff0c; block期间该信号不能被递达&#xff0c;一直在pending表中。知道block被撤销后&#xff0c; 该信号才能递达&#xff0c;递达后对应pending位置置零。 忽…