一、環境準備
1.1 前置條件
管理節點:使用galaxy master 鏡像的A800(80GB)GPU 的物理機。
計算節點:所有計算節點需使用 galaxy compute 鏡像。
服務狀態:確保 slurm 服務已初始化并成功啟動。
1.2 本地 NVME 分區
將各個節點的兩塊 NVME 盤(nvme0n1 和 nvme1n1)分別掛載至指定路徑(/mnt/nvme0n1 和 /mnt/nvme1n1),具體操作步驟如下:
#!/bin/bash
# 設備列表
devices=("/dev/nvme0n1" "/dev/nvme1n1")
mount_points=("/mnt/nvme0n1" "/mnt/nvme1n1")
fs_type="xfs"
# 確保 root 權限
if [[ $EUID -ne 0 ]]; then
echo "請使用 root 運行此腳本!"
exit 1
fi
for i in "${!devices[@]}"; do
device="${devices[$i]}"
mount_point="${mount_points[$i]}"
# 創建掛載目錄
mkdir -p "$mount_point"
# 獲取設備的文件系統類型
current_fs=$(blkid -s TYPE -o value "$device")
if [[ -z "$current_fs" ]]; then
echo "設備 $device 沒有文件系統,正在格式化為 $fs_type..."
mkfs.xfs -f "$device"
else
echo "$device 已格式化為 $current_fs,跳過格式化"
fi
# 確保設備未被掛載后再嘗試掛載
umount "$device" 2>/dev/null
mount -t "$fs_type" "$device" "$mount_point"
if [[ $? -ne 0 ]]; then
echo "錯誤:無法掛載 $device 到 $mount_point,請檢查設備或文件系統!"
exit 1
fi
echo "$device 已成功掛載到 $mount_point"
# 獲取 UUID 并更新 /etc/fstab,避免重復添加
uuid=$(blkid -s UUID -o value "$device")
if ! grep -q "$uuid" /etc/fstab; then
echo "UUID=$uuid $mount_point $fs_type defaults 0 0" >> /etc/fstab
echo "$device (UUID=$uuid) 已添加到 /etc/fstab"
else
echo "$device 已存在于 /etc/fstab,無需添加"
fi
done
echo "所有磁盤已成功掛載并配置為開機自動掛載!"
查看磁盤分區情況,可執行命令:
$ lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 446.6G 0 disk
|-sda1 8:1 0 122M 0 part
|-sda2 8:2 0 976.6M 0 part /boot/efi
|-sda3 8:3 0 1.9G 0 part /boot
`-sda4 8:4 0 443.7G 0 part
|-system-lv_swap 253:0 0 16G 0 lvm [SWAP]
`-system-lv_root 253:1 0 427.7G 0 lvm /
nvme0n1 259:0 0 2.9T 0 disk /mnt/nvme0n1
nvme1n1 259:1 0 2.9T 0 disk /mnt/nvme1n1
執行掛載腳本:sh mount.nvme.sh
1.3 下載應用及腳本
在指定目錄下下載 sglang 應用,并將其放置于 /home/sglang 目錄中,具體操作如下:
mkdir -p /home/sglang/log
cd /home/sglang
wget //jiangsu-10.zos.daliqc.cn/galaxy/apptainer/sglang/sglang_v0.4.5.post3-cu125.sif
1.4 下載模型文件
DeepSeek 模型體積較大,建議通過 huggingface 或 modelscope 平臺進行下載,并將模型存儲在每臺計算節點的 NVME 磁盤中,例如存儲在 /mnt/nvme1n1/model 目錄下。推薦使用 DeepSeek-R1-Channel-INT8 模型,模型存儲路徑示例:/mnt/nvme1n1/model/DeepSeek-R1-Channel-INT8 。
二、起停服務
2.1 配置 deepseek
在 /home/sglang 目錄下創建 srun.sh 文件,文件內容如下:
#!/bin/bash
#SBATCH -N 2
#SBATCH --ntasks=2
#SBATCH --exclusive
#SBATCH --partition=batch
#SBATCH -J deepseek
#SBATCH -o log/log_ds_%J.out
#SBATCH --gres=gpu:8
#export NCCL_DEBUG=INFO
export NCCL_SOCKET_IFNAME=bond0
export NCCL_IB_HCA=mlx5_0,mlx5_1,mlx5_5,mlx5_6
export OMP_NUM_THREADS=8
export HF_DATASETS_NUM_THREADS=8
export TRANSFORMERS_OFFLINE=1
export SGLANG_IMG=sglang_v0.4.5.post3-cu125.sif
export MODEL_DIR=/mnt/nvme1n1/model/DeepSeek-R1-Channel-INT8/
export MODEL_NAME=DeepSeek-R1
export NODES=$(scontrol show hostnames $SLURM_JOB_NODELIST)
export MASTER_ADDR=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n 1 | hostname -i)
readarray -t NODE_ARRAY <<< "$NODES"
for i in "${!NODE_ARRAY[@]}"; do
NODE_NAME="${NODE_ARRAY[$i]}"
NODE_RANK="$i"
echo $NODE_NAME,$NODE_RANK,$SLURM_NNODES
srun --nodes=1 --nodelist=$NODE_NAME --ntasks=1 \
--gres=gpu:8 \
--cpus-per-task 64 \
--output="log/log_ds_%J.out" \
--error="log/log_ds_%J.err" \
apptainer exec --nv --no-home --writable-tmpfs \
-B $MODEL_DIR:/root/.cache/huggingface \
$SGLANG_IMG \
python3 -m sglang.launch_server \
--model-path /root/.cache/huggingface \
--served-model-name $MODEL_NAME \
--host 0.0.0.0 --port 8000 \
--trust-remote-code \
--tensor-parallel-size 16 \
--enable-torch-compile \
--torch-compile-max-bs 8 \
--quantization w8a8_int8 \
--dist-init-addr $MASTER_ADDR:5000 \
--nnodes $SLURM_NNODES --node-rank $NODE_RANK &
done
wait
用戶可根據實際情況修改以下三項配置內容:
- SGLANG_IMG:指定 sglang apptainer 鏡像容器,后續可根據需求自行升級替換。示例配置:export SGLANG_IMG=sglang_v0.4.5.post3-cu125.sif
- MODEL_DIR:設置模型的具體存儲位置。示例配置:export MODEL_DIR=/mnt/nvme1n1/model/DeepSeek-R1-Channel-INT8/
- MODEL_NAME:定義顯示的模型名稱。示例配置:export MODEL_NAME=DeepSeek-R1
2.2 啟動 deepseek
切換至 /home/sglang 目錄,執行以下命令啟動 deepseek 服務:
cd /home/sglang
sbatch srun_sglang.sh
執行結果示例:Submitted batch job 403。當在 log 目錄下的 err 文件中出現以下信息時,表明服務已成功啟動:
INFO: Started server process [4506]
INFO: Waiting for application startup.
INFO: Application startup complete.
INFO: Uvicorn running on //0.0.0.0:8000 (Press CTRL+C to quit)
2.3 查看 deepseek 狀態
通過 slurm 命令 squeue 可查看作業運行信息,執行命令:
squeue
執行結果示例:
JOBID PARTITION NAME USER ST TIME NODES NODELIST(REASON)
403 batch deepseek root R 8:19 2 compute[01-02]
同時,用戶可在 /home/sglang/log 目錄中查看當前作業的 log 文件,獲取更多詳細信息。
2.4 停止 deepseek
若需停止 DS 服務,可通過以下方式操作:
已知服務的 JOB ID(例如上述示例中的 403),可執行命令:
scancel 403
也可使用命令直接取消當前用戶的所有作業:
scancel --me
三、總結
本次部署的核心環節涵蓋環境準備與服務起停兩大部分。在環境準備階段,需完成鏡像選擇、磁盤掛載、軟件安裝以及模型下載等關鍵操作;服務起停部分則詳細介紹了服務的配置、啟動、狀態查看及停止方法。通過嚴格按照本指南操作,可順利完成 基于NVidia A800-80GB 的雙機部署,為相關應用的高效運行奠定基礎 。