当前位置: 首页 > article >正文

k8s 上如何跑 Dolphins 模型

接着上一篇的介绍,这一篇就来跑跑 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.kler.cn/a/380368.html

相关文章:

  • 华为 HarmonyOS NEXT 原生应用开发: 动画的基础使用(属性、显示、专场)动画
  • Linux中断、软中断、MMU内存映射-深入理解
  • MySQL之JDBC入门详解
  • 测长机在测量长度尺寸方面有哪些优势?如何保证测量的准确性?
  • 谷歌浏览器报“喔唷,崩溃啦!”怎么办?
  • HTML5实现小鸟过管道小游戏源码
  • CentOS一次性安装 Nginx 的脚本指南
  • MySQL45讲 第十一讲 怎么给字符串字段加索引?
  • TCP建立连接之后怎么保持长连接(检测连接断没断)
  • 面试准备第一版ssm spring-springmvc
  • Swift 开发教程系列 - 第1章:Swift 简介与开发环境配置
  • Ubuntu下网络抓包工具:Wireshark与Tcpdump实例解析
  • 科技 | 谷歌 AI 生成代码争议
  • mysql到doris的DDL整库转换工具
  • Nop平台与APIJSON的功能对比
  • 国际化教育品牌的人力资源管理利器
  • CVE-2024-51567 CyberPanel upgrademysqlstatus 远程命令执行
  • JavaEE初阶-----servlet-api,Maven创建项目,部署,打包,测试全过程
  • 分类模型onnx推理,并生成混淆矩阵
  • 如何在本地Linux服务器搭建WordPress网站结合内网穿透随时随地可访问
  • 使用 Python 中的 pydub实现 M4A 转 MP3 转换器
  • element-plus按需引入报错IconsResolver is not a function
  • 经纬恒润车载TSN网络测试仪TestBase-ATT全新上线!
  • C#、C和C++的主要区别
  • Python | Leetcode Python题解之第530题二叉搜索树的最小绝对差
  • 将Notepad++添加到右键菜单【一招实现】