k8s 上如何跑 Dolphins 模型

news/2024/11/8 17:36:30 标签: k8s, Dolphins

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

k8s__pod_2">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

Dolphins_44">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

k8s__pod__134">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.niftyadmin.cn/n/5744224.html

相关文章

Webpack知识点—publicPath

文章目录 一、publicPath的定义和作用二、publicPath的配置方式三、publicPath的注意事项四、publicPath的常见问题和解决方法五、Vite 如何修改publicPathWebpack的publicPath是一个重要的配置项,它用于指定打包后生成的静态资源文件在浏览器中的访问路径。 一、publicPath的…

【计算机网络】章节 知识点总结

一、计算机网络概述 1. 计算机网络向用户提供的两个最重要的功能:连通性、共享 2. 因特网发展的三个阶段: 第一阶段:从单个网络 ARPANET 向互联网发展的过程。1983 年 TCP/IP 协议成为 ARPANET 上的标准协议。第二阶段:建成三级…

亚信安全新一代WAF:抵御勒索攻击的坚固防线

近年来,勒索攻击已成为黑客的主要攻击手段。新型勒索攻击事件层出不穷,勒索攻击形势愈发严峻,已经对全球制造、金融、能源、医疗、政府组织等关键领域造成严重危害。如今,勒索攻击手段日趋成熟、攻击目标愈发明确,模式…

针对曲率中的局部抖动进行平滑

在计算曲率的过程中,采用平滑函数确实能够有效降低数据的抖动现象。然而,若对整个数据集实施平滑处理,则可能会引发数据失真的问题。 为了最大程度地减少抖动并尽可能确保曲率计算的准确性,我们应当仅针对曲率中的局部抖动进行平…

「C/C++」C/C++ 之 变量作用域详解

✨博客主页何曾参静谧的博客📌文章专栏「C/C」C/C程序设计📚全部专栏「VS」Visual Studio「C/C」C/C程序设计「UG/NX」BlockUI集合「Win」Windows程序设计「DSA」数据结构与算法「UG/NX」NX二次开发「QT」QT5程序设计「File」数据文件格式「PK」Parasoli…

力扣—不同路径(路径问题的动态规划)

文章目录 题目解析算法原理代码实现题目练习 题目解析 算法原理 状态表示 对于这种「路径类」的问题,我们的状态表示⼀般有两种形式: i. 从[i, j] 位置出发。 ii. 从起始位置出发,到[i, j] 位置。 这⾥选择第⼆种定义状态表⽰的⽅式&#xf…

git新手使用教程

git新手使用教程 一、安装和初始化配置2、新建仓库3.工作区域和文件状态4.添加和提交文件5 git reset回退版本6 使用git diff查看差异7 使用git rm删除文件8 .gitignore忽略文件9 注册GitHub账号10 SSH配置和克隆仓库11 关联本地仓库和远程仓库12 Gitee的使用 由B站视频教程整理…

SQL相关常见的面试题

SQL(Structured Query Language)是数据库管理中不可或缺的一部分,因此在技术面试中经常会被问到与 SQL 相关的问题。以下是一些常见的 SQL 面试题及其答案。 基础概念 什么是 SQL? SQL 是一种用于管理和处理关系型数据库的标准语…