k8s 上如何跑 Dolphins 模型

news2024/11/13 17:11:16

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

1 在 k8s 上创建 pod

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

# dolphins.yaml
apiVersion: v1
kind: Pod
metadata:
 name: czl-test-pod-dolphins
 labels:
   app: czl-dolphins
spec:
 containers:
 - name: czl-1-container
   image: harbor.yoocar.com.cn/deeplearning/pytorch/pytorch:2.1.0-cuda11.8-cudnn8-devel
   #imagePullPolicy: Always
   command: ['sh', '-c', 'sleep infinity;']
   resources:
     limits:
       nvidia.com/gpu: 1
     requests:
       nvidia.com/gpu: 1
   volumeMounts:
     - name: data
       mountPath: /mount/bev
     - name: dshm
       mountPath: /dev/shm
 volumes:
   - name: data
     hostPath:
       path: "/root/data/pjp/dolphins"
       type: Directory
   - name: dshm
     emptyDir:
       medium: Memory
       sizeLimit: 1000Gi
 restartPolicy: 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, None
    peft_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-7b
        tokenizer_path="/mount/bev/anas-awadalla/mpt-7b",  #  修改地址 anas-awadalla/mpt-7b
        cross_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-dolphins
  type: NodePort
  ports:
    - protocol: TCP
      port: 7862
      targetPort: 7862
      nodePort: 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.coloradmin.cn/o/2236453.html

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

相关文章

如何避免数据倾斜

1、数据倾斜的表现 数据倾斜是由于数据分布不均匀,造成数据大量的集中到一点,造成数据热点的现象。 主要表现:任务进度长时间维持在 99%或者 100%的附近,查看任务监控页面,发现只有少量 reduce 子任务未完成&#xff0…

计算机网络综合题

IP数据报的划分 CRC差错检测 冗余码的计算 因此,余数是1110,传输的数为11010110111110。在传输过程中最后两位变成o,接收端能够发现,因为11010110111110除以10011余数不为0。 子网划分 暴力求解法 (定长子网划分大量…

O-RAN前传Spilt Option 7-2x

Spilt Option 7-2x 下行比特处理上行比特处理相关文章: Open Fronthaul wrt ORAN 联盟被称为下层拆分(LLS),其目标是提高电信市场的灵活性和竞争力。下层拆分是指无线电单元(RU) 和分布式单元(DU) 之间的拆分。 O-RAN前传接口可以在 eCPRI 上传输。eCPR…

淘酒屋殷卓荣窖主高端客户私享答谢晚宴暨意大利摩罗斯酒庄之夜

一边是热爱,一边是事业,鱼与熊掌兼得淘酒屋殷卓荣窖主答谢晚宴圆满结束 淘酒屋殷卓荣窖主高端 VIP 客户私享答谢晚宴暨意大利摩罗斯酒庄品鉴之夜在广州四季酒店 99 楼圆满举办 2024 年 11 月 8 日晚,一场别开生面的淘酒屋殷卓荣窖主高端 VI…

SQL EXISTS谓词

谓词时返回值为真值&#xff08;true、false或unknown&#xff09;的函数。EXISTS与其他谓词不同&#xff0c;它接受的参数是行的集合。 输入值为一行的谓词叫做“一阶谓词”&#xff08;例如>、<、 及 LIKE等&#xff09;&#xff1b;输入值为行的集合的谓词叫做“二阶…

鸿蒙进阶-属性动画

hello大家好啊&#xff0c;这里是鸿蒙开天组&#xff0c;今天我们来学习鸿蒙中的动画属性。 先来说说动画~ 属性值的变化&#xff0c;通常会引发 UI 的变化,结合动画可以让这个变化过程【更为流畅】&#xff0c;反之这个过程将在一瞬间完成&#xff0c;用户体验不好&#xff…

算法每日练 -- 双指针篇(持续更新中)

介绍&#xff1a; 常见的双指针有两种形式&#xff0c;一种是对撞指针&#xff08;左右指针&#xff09;&#xff0c;一种是快慢指针&#xff08;前后指针&#xff09;。需要注意这里的双指针不是 int* 之类的类型指针&#xff0c;而是使用数组下标模拟地址来进行遍历的方式。 …

RHCE的学习(11)

第八章 防火墙 什么是防火墙 防火墙是位于内部网和外部网之间的屏障&#xff0c;它按照系统管理员预先定义好的规则来控制数据包的进出。 分类&#xff1a; 硬件防火墙&#xff1a;由厂商设计好的主机硬件&#xff0c;其操作系统主要以提供数据包数据的过滤机制为主&#xff…

Java开发配置文件的详情教程配置文件类型

学习总结 1、掌握 JAVA入门到进阶知识(持续写作中……&#xff09; 2、学会Oracle数据库入门到入土用法(创作中……&#xff09; 3、手把手教你开发炫酷的vbs脚本制作(完善中……&#xff09; 4、牛逼哄哄的 IDEA编程利器技巧(编写中……&#xff09; 5、面经吐血整理的 面试技…

ffmpeg:视频字幕嵌入(GPU加速)

实现方案 参考指令 ffmpeg -i input_video.mp4 -vf "subtitlessubtitles.srt" output_video.mp4 解决因文件名称复杂导致的指令执行失败问题&#xff08;引号给文件框起来&#xff09; ffmpeg -i "A.mp4" -vf "subtitlesB.srt" "c.mp4&qu…

改进系列(3):基于ResNet网络与CBAM模块融合实现的生活垃圾分类

目录 1. ResNet介绍 2. CBAM 模块 3. resnet cbam 3.1 添加在每个layer层后 3.2 关于训练的建议 4. 垃圾分类实战 4.1 数据集 4.2 训练 4.3 最好的权重 4.4 推理 5. 其它 1. ResNet介绍 ResNet&#xff08;残差网络&#xff09;是一种深度卷积神经网络模型&#xf…

【HarmonyOS Next】数据本地存储:@ohos.data.preferences

【HarmonyOS Next】数据本地存储&#xff1a;ohos.data.preferences 在开发现代应用程序时&#xff0c;数据存储是一个至关重要的过程。应用程序为了保持某些用户设置、应用状态以及其他小量数据信息通常需要一个可靠的本地存储解决方案。在 HarmonyOS Next 环境下&#xff0c…

【从零开始的LeetCode-算法】3255. 长度为 K 的子数组的能量值 II

给你一个长度为 n 的整数数组 nums 和一个正整数 k 。 一个数组的 能量值 定义为&#xff1a; 如果 所有 元素都是依次 连续 且 上升 的&#xff0c;那么能量值为 最大 的元素。否则为 -1 。 你需要求出 nums 中所有长度为 k 的 子数组 的能量值。 请你返回一个长度为 n - …

C++ 参数传递 笔记

目录 1、输入参数的传递方式-选择传值还是传引用&#xff1f; 处理用户信息 处理坐标 处理配置 处理ID 2、对于需要修改的参数,使用非const引用传递 有趣的例外&#xff1a;警惕表象的迷惑 需要警惕的陷阱 “糟糕”的update方法&#xff1a; “完美”的set_name与set…

爬虫策略规避:Python爬虫的浏览器自动化

网络爬虫作为一种自动化获取网页数据的技术&#xff0c;被广泛应用于数据挖掘、市场分析、竞争情报等领域。然而&#xff0c;随着反爬虫技术的不断进步&#xff0c;简单的爬虫程序往往难以突破网站的反爬虫策略。因此&#xff0c;采用更高级的爬虫策略&#xff0c;如浏览器自动…

信号-3-信号处理、可重入函数与`volatile`关键字总结

信号处理是操作系统中的一个重要机制&#xff0c;它允许进程在运行期间响应外部事件&#xff0c;并作出相应的处理。为了处理信号&#xff0c;程序员需要理解如何设置信号处理器&#xff0c;如何管理信号的屏蔽与阻塞&#xff0c;以及信号的递送机制。本文将结合操作系统中的信…

深度学习-图像评分实验(TensorFlow框架运用、读取处理图片、模型建构)

目录 0、实验准备 ①实验环境 ②需要下载的安装包 ③注意事项&#xff08;很关键&#xff0c;否则后面内容看不懂&#xff09; ④容易出现的问题 1、查看数据并读取数据。 2、PIL库里的Image包进行读取&#xff08;.resize更改图片尺寸&#xff0c;并将原始数据归一化处…

【Linux系统】—— 基本指令(二)

【Linux系统】—— 基本指令&#xff08;二&#xff09; 1 「alias」命令1.1 「ll」命令1.2 「alias」命令 2 「rmdir」指令与「rm」指令2.1 「rmdir」2.2 「rm」2.2.1 「rm」 删除普通文件2.2.2 「rm」 删除目录2.2.3 『 * 』 通配符 3 「man」 指令4 「cp」 指令4.1 拷贝普通…

面向对象技术简述(含设计模式)

6.9.2 面向对象技术 面向对象 对象 分类 继承 通过消息的通信 面向对象 对象 分类 继承 通过消息的通信 面向对象对象分类继承通过消息的通信其中包括&#xff1a; 对象 运行的实体&#xff1b;既包含属性/数据&#xff0c;又包含方法/行为/操作数据的函数&#xff1b;…

【信号处理】基于联合图像表示的深度学习卷积神经网络

Combined Signal Representations for Modulation Classification Using Deep Learning: Ambiguity Function, Constellation Diagram, and Eye Diagram 信号表示 Ambiguity Function(AF) 模糊函数描述了信号的两个维度(dimensions):延迟(delay)和多普勒(Doppler)。 …