在海光DCU-K100-AI-4上使用ollama和vLLM分别部署qwq-32B、DeepSeek


一、使用ollama部署

下载镜像

docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-py3.10-dtk24.04.3-ubuntu20.04

启动容器

docker run --shm-size 50g --network=host --name={容器名} \
--privileged --device=/dev/kfd --device=/dev/dri \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
-v /opt/hyhal:/opt/hyhal:ro \
-v /home/ollama:/ollama \
--env HIP_VISIBLE_DEVICES=0,1,2,3 \
-it image.sourcefind.cn:5000/dcu/admin/base/pytorch:2.1.0-py3.10-dtk24.04.3-ubuntu20.04 bash

我有四张卡所以是HIP_VISIBLE_DEVICES=0,1,2,3,根据自己情况来。

在Docker环境里面,进入/ollama,下载源码

git clone -b 0.5.7 http://developer.sourcefind.cn/codes/OpenDAS/ollama.git --depth=1
cd ollama

编译

安装go

wget https://golang.google.cn/dl/go1.23.4.linux-amd64.tar.gz
tar -C /usr/local -xzf go1.23.4.linux-amd64.tar.gz
export PATH=$PATH:/usr/local/go/bin

# 修改go下载源,提升速度(按需设置)
go env -w GOPROXY=https://goproxy.cn,direct

运行编译

export LIBRARY_PATH=/opt/dtk/lib:$LIBRARY_PATH
make -j 16
go build .

编译成功后,应该能看到编译成功的可执行文件ollama:

运行

export HSA_OVERRIDE_GFX_VERSION=9.2.8(如: Z100L gfx906对应9.0.6;K100 gfx926对应9.2.6;K100AI gfx928对应9.2.8)
export ROCR_VISIBLE_DEVICES=0,1,2,3(0,1,2,3,4,5,6,...)/选择设备号
./ollama serve  (选择可用设备,可通过上条命令输出结果查看)

创建容器

docker commit {上面的容器名} {临时容器名(我用的是tmp)}
在宿主机新建新建Dockerfile

FROM tmp
ENV HSA_OVERRIDE_GFX_VERSION=9.2.8
ENV ROCR_VISIBLE_DEVICES=0,1,2,3
ENV PATH="/home/ollama/ollama:${PATH}"
ENV OLLAMA_MODELS="/home/ollama/models/"
ENV OLLAMA_HOST=0.0.0.0:{端口号}
ENTRYPOINT ["/home/ollama/ollama"]
CMD ["serve"]
docker build -t ollama {你的Dockerfile路径} #ollama可替换为你的自定义容器名
docker run --shm-size 100g --network=host --name=ollama \
--privileged --device=/dev/kfd --device=/dev/dri \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
-v /opt/hyhal:/opt/hyhal:ro \
-v /home/ollama/:/home \
-v /home/ollama/models/:/home/models \
-d  ollama

进入容器并测试ollama是否运行

docker exec -it ollama bash
ollama -v

然后运行qwq-32B,这里采用默认的Q4

ollama run qwq

二、使用vLLM部署

下载镜像

docker pull image.sourcefind.cn:5000/dcu/admin/base/custom:vllm0.5.0-dtk24.04.1-ubuntu20.04-py310-zk-v1

下载模型

从ModelScope下载。

1、安装ModelScope

pip install modelscope

2、下载DeepSeek-R1-Distill-Llama-70B

modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Llama-70B --local_dir /下载目录

启动容器

docker run --shm-size 50g --network=host --name=DeepSeek-R1-Distill-Llama-70B \
--privileged --device=/dev/kfd --device=/dev/dri \
--cap-add=SYS_PTRACE --security-opt seccomp=unconfined \
-v /opt/hyhal:/opt/hyhal:ro \
-v {本地模型目录}:/models:ro \
--env HIP_VISIBLE_DEVICES=0,1,2,3 \
-it image.sourcefind.cn:5000/dcu/admin/base/custom:vllm0.5.0-dtk24.04.1-ubuntu20.04-py310-zk-v1 bash

注:四块卡使用,HIP_VISIBLE_DEVICES=0,1,2,3(根据实际调整)

shell断开后进入容器:

docker exec -it DeepSeek-R1-Distill-Llama-70B bash

进入容器后使用rocm-smi查询DCU

启动vLLM

配置环境变量

export NCCL_DEBUG=info
export NCCL_P2P_DISABLE=1
export HSA_FORCE_FINE_GRAIN_PCIE=1

启动

python -m vllm.entrypoints.openai.api_server \
  --model /models/DeepSeek-R1-Distill-Llama-70B \
  --dtype float16 \
  --trust-remote-code \
  --gpu-memory-utilization 0.98 \
  --tensor-parallel-size 4 \
  --max-num-seqs 32 \
  --max-model-len 20000

参数说明:

参数 解释说明
--model /models/DeepSeek-R1-Distill-Llama-70B 指定加载的模型路径
--dtype float16 推理时使用半精度浮点数(FP16),降低显存占用
--trust-remote-code 允许执行模型目录下的自定义Python代码(需注意安全性)
--gpu-memory-utilization 0.98 指定GPU显存占用率为98%,提高显存利用效率
--tensor-parallel-size 4 模型权重4卡并行加载 (tensor parallel)
--max-num-seqs 32 API同时处理的最大并发请求数量
--max-model-len 20000 单次请求中模型能处理的最大token数量

文章作者: 你的朋友
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 你的朋友 !