本文编译自Azure High Performance Computing (HPC) Blog,原文标题《Running DeepSeek-R1 on a single NDv5 MI300X VM》。
贡献者:Davide Vanzo、Yuval Mazor、Jesse Lopez
DeepSeek-R1是基于DeepSeek-V3构建的开放权重推理模型,专为对话式 AI、编码和复杂问题解决而设计。由于其强大的推理能力,它在 AI/ML 社区之外获得了极大关注,经常与 OpenAI 的模型相媲美。它的一个主要优势是它可以在本地运行,让用户完全控制自己的数据。
NDv5 MI300X VM配备 8 个 AMD Instinct MI300X GPU,每个 GPU 配备 192GB HBM3 并通过 Infinity Fabric 3.0 互连。MI300X 每个 GPU 的内存带宽高达 5.2 TB/s,可提供高效处理大型模型所需的容量和速度 - 使用户能够在单个 VM 上以全精度运行 DeepSeek-R1。
在这篇博文中,我们将引导您完成在 Azure 上配置 NDv5 MI300X 实例并使用SGLang推理框架运行 DeepSeek-R1 进行推理的步骤。
启动NDv5 MI300X VM
先决条件
- - 检查您的订阅是否为 VM 系列“ StandardNDI Sv 5MI300X”提供了足够的 vCPU 配额(请参阅配额文档)。
- - 如果需要,请联系你的 Microsoft 客户代表以请求增加配额。
- - 安装了Azure CLI并登录到相应租户的 Bash 终端。或者,也可以使用Azure Cloud Shell 。
配置虚拟机
1.使用 Azure CLI 在 ND_MI300x_v5 上创建 Ubuntu-22.04 VM:
az group create –location
az vm create --name mi300x --resource-group
2.通过 SSH 登录虚拟机并将内核降级到版本 5.15.0:
sudo apt install -y linux-image-5.15.0-1073-azure linux-modules-5.15.0-1073-azure linux-headers-5.15.0-1073-azure linux-tools-5.15.0-1073-azure
sudo sed -i "s|GRUB_DEFAULT=.*|GRUB_DEFAULT='gnulinux-advanced-0b58668a-ba2e-4a00-b89a-3354b7a547d4>gnulinux-5.15.0-1073-azure-advanced-0b58668a-ba2e-4a00-b89a-3354b7a547d4'|g" /etc/default/grub
sudo update-grub
删除当前内核包。 当系统询问是否中止内核删除时,请确保回答“否” :
sudo apt remove -y linux-azure-6.5-cloud-tools-6.5.0-1025 linux-azure-6.5-headers-6.5.0-1025 linux-azure-6.5-tools-6.5.0-1025 linux-cloud-tools-6.5.0-1025-azure linux-headers-6.5.0-1025-azure linux-image-6.5.0-1025-azure linux-modules-6.5.0-1025-azure linux-tools-6.5.0-1025-azure
sudo reboot
重启后,确认使用的内核是5.15.0版本:
uname -r
3.安装所需的驱动程序和软件:
git clone --branch mi300x https://github.com/vanzod/azhpc-images.git
cd azhpc-images/ubuntu/ubuntu-22.x/ubuntu-22.04-hpc
sudo ./install.sh AMD
创建自定义VM映像(可选)
为了在未来部署虚拟机时具有更大的灵活性,我们建议创建自定义虚拟机映像。这样,映像将包含所有必需的组件,而无需在每次部署新虚拟机时安装它们。
1. 将虚拟机通用化以创建映像:
sudo rm -f ~/.bash_history
sudo waagent -force -deprovision+user
2.使用 Azure CLI 解除分配并将 VM 标记为通用:
az vm deallocate --resource-group
az vm generalize --resource-group
3.创建共享图库并保存自定义镜像:
az sig create --resource-group
VMID=$(az vm get-instance-view -g
az sig image-definition create --resource-group
az sig image-version create --resource-group
4.删除虚拟机及相关资源:
az vm delete --yes --resource-group
az network nic delete --resource-group
az network public-ip delete --resource-group
5. 检索创建新虚拟机时所需的虚拟机映像资源 ID:
az image show --resource-group
6. 从自定义映像创建新的虚拟机:
az vm create --name
其他准备
除了配置虚拟机之外,还有其他步骤来准备环境以最佳地运行 DeepSeed 或其他 AI 工作负载,包括在 RAID-0 配置中在节点上设置 8 个 NVMe 磁盘,作为 Docker 和 Hugging Face 的缓存位置。
以下步骤假设您已连接到 VM 并在 Bash shell中工作。
1. 在 RAID-0 配置中准备 NVMe 磁盘
mkdir -p /mnt/resource_nvme/
sudo mdadm --create /dev/md128 -f --run --level 0 --raid-devices 8 $(ls /dev/nvme*n1)
sudo mkfs.xfs -f /dev/md128
sudo mount /dev/md128 /mnt/resource_nvme
sudo chmod 1777 /mnt/resource_nvme
2. 配置 Hugging Face 使用 RAID-0。此环境变量还应传播到从 Hugging Face 提取图像或数据的任何容器。
mkdir –p /mnt/resource_nvme/hf_cache
export HF_HOME=/mnt/resource_nvme/hf_cache
3.配置Docker使用RAID-0
mkdir -p /mnt/resource_nvme/docker
sudo tee /etc/docker/daemon.json > /dev/null <
{
"data-root": "/mnt/resource_nvme/docker"
}
EOF
sudo chmod 0644 /etc/docker/daemon.json
sudo systemctl restart docker
使用 MI300X
如果您熟悉 Nvidia 和 CUDA 工具和环境,AMD 提供了 ROCm 堆栈中的等效产品。
MI300X + ROCm | Nvidia + | 描述 |
rocm-smi | nvidia-smi | 用于监视系统并进行更改的CLI |
rccl | nccl | GPU 之间通信的库 |
运行DeepSeek-R1
1. 拉取容器镜像。它大约有 20 GB,因此可能需要几分钟才能下载。
docker pull lmsysorg/sglang:v0.4.2-rocm620
2. 启动SGLang服务器。 首次启动时会下载模型(~ 642 GB),下载至少需要几分钟。 一旦应用程序输出“服务器已启动并准备就绪!”,您就可以开始对模型进行查询。
docker run \
--device=/dev/kfd \
--device=/dev/dri \
--security-opt seccomp=unconfined \
--cap-add=SYS_PTRACE \
--group-add video \
--privileged \
--shm-size 32g \
--ipc=host \
-p 30000:30000 \
-v /mnt/resource_nvme:/mnt/resource_nvme \
-e HF_HOME=/mnt/resource_nvme/hf_cache \
-e HSA_NO_SCRATCH_RECLAIM=1 \
lmsysorg/sglang:v0.4.2-rocm620 \
python3 -m sglang.launch_server --model deepseek-ai/DeepSeek-R1 --tp 8 trust-remote-code --host 0.0.0.0
3. 您现在可以对DeepSeek-R1 进行查询。例如,来自同一主机上的另一个 shell对模型的这些请求提供了模型数据并将生成示例响应。
curl http://localhost:30000/get_model_info
{"model_path":"deepseek-ai/DeepSeek-R1","tokenizer_path":"deepseek-ai/DeepSeek-R1","is_generation":true}
curl http://localhost:30000/generate -H "Content-Type: application/json" -d '{ "text": "Once upon a time,", "sampling_params": { "max_new_tokens": 16, "temperature": 0.6 } }'
结论
在这篇文章中,我们详细介绍了如何在单个 Azure NDv5 MI300X 实例上运行全尺寸 671B DeepSeek-R1 模型。这包括设置机器、安装必要的驱动程序以及执行模型。祝您推理愉快!
原文链接
https://techcommunity.microsoft.com/blog/AzureHighPerformanceComputingBlog/running-deepseek-r1-on-a-single-ndv5-mi300x-vm/4372726
参考
- https://github.com/deepseek-ai/DeepSeek-R1
- https://github.com/deepseek-ai/DeepSeek-V3
- https://www.amd.com/en/developer/resources/technical-articles/amd-instinct-gpus-power-deepseek-v3-revolutionizing-ai-development-with-sglang.html
- https://techcommunity.microsoft.com/blog/azurehighperformancecomputingblog/azure-announces-new-ai-optimized-vm-series-featuring-amd%e2%80%99s-flagship-mi300x-gpu/3980770
https://docs.sglang.ai/index.html
注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)