在Azure MI300X GPU虚机上运行 DeepSeek-R1

在Azure MI300X GPU虚机上运行 DeepSeek-R1

解决方案goocz2025-02-22 18:34:4811A+A-

本文编译自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 -n

az vm create --name mi300x --resource-group --location --image Canonical:0001-com-ubuntu-server-jammy:22_04-lts-gen2:22.04.202410020 --size Standard_ND96isr_MI300X_v5 --security-type Standard --os-disk-size-gb 256 --os-disk-delete-option Delete --admin-username azureadmin --ssh-key-values

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 --name mi300x

az vm generalize --resource-group --name mi300x

3.创建共享图库并保存自定义镜像:

az sig create --resource-group --gallery-name mi300xImages

VMID=$(az vm get-instance-view -g -n mi300x --query id -o tsv)

az sig image-definition create --resource-group --gallery-name mi300xImages --gallery-image-definition Ubuntu-2204-ROCm --publisher --offer ubuntu2204 --sku ROCm --os-type Linux --hyper-v-generation v2 --features SecurityType=Standard

az sig image-version create --resource-group --gallery-name mi300xImages --gallery-image-definition Ubuntu-2204-ROCm --gallery-image-version 1.0.0 --target-regions --replica-count 1 --virtual-machine ${VMID}

4.删除虚拟机及相关资源:

az vm delete --yes --resource-group --name mi300x

az network nic delete --resource-group --name mi300xNIC

az network public-ip delete --resource-group --name mi300xPIP

5. 检索创建新虚拟机时所需的虚拟机映像资源 ID

az image show --resource-group --name Ubuntu-2204-ROCm --query id --output tsv

6. 从自定义映像创建新的虚拟机:

az vm create --name --resource-group --location --image --size Standard_ND96isr_MI300X_v5 --security-type Standard --os-disk-size-gb 256 --admin-username --ssh-key-values

其他准备

除了配置虚拟机之外,还有其他步骤来准备环境以最佳地运行 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 +
CUDA

描述

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


注:本文只代表作者个人观点,与任何组织机构无关,如有错误和不足之处欢迎在留言中批评指正。如果您想在这个公众号上分享自己的技术干货,也欢迎联系我:)

点击这里复制本文地址 以上内容由goocz整理呈现,请务必在转载分享时注明本文地址!如对内容有疑问,请联系我们,谢谢!

果子教程网 © All Rights Reserved.  蜀ICP备2024111239号-5