DeepSeek-R1 凭借其优秀的深度推理能力,一经推出便在 AI 市场掀起热潮。
然而,DeepSeek-R1 包含 671B 的模型参数,基于 FP8 的数据精度,权重显存消耗接近 700GB,单卡 96GB 显存的 GPU 卡,也需要 16 卡进行多卡部署(2 台 ecs.hpcpni3ln.45xlarge 实例),多机推理之间的数据传输效率也面临极大挑战。如何在保证模型性能的前提下,提升部署效率、降低推理成本,成为限制 DeepSeek-R1 大模型规模化部署及应用的关键挑战。
为应对上述挑战,火山引擎与 NVIDIA 深度协同,推出基于 TensorRT-LLM 推理框架的 DeepSeek-R1 加速优化方案,通过 W4A8 量化技术实现性能突破,在大幅降低模型存储需求和计算复杂度的同时,最大限度的保留了模型精度:
基于该 TensorRT-LLM 的 W4A8 优化方案,可以在火山引擎 ecs.hpcpni3ln.45xlarge 实例规格上(包含 8 张 96GB 显存的 GPU)部署 DeepSeek-R1,相比非量化方案,在不影响模型本身效果的情况下(参照 MMLU 和 MATH-500 基准数据对比),量化方案的 Tokens 吞吐提升 100%,所需硬件资源及成本减半。
在正式部署 DeepSeek-R1 W4A8 模型推理服务前,需要先完成 ECS 云服务器的实例创建及环境准备。首先,进入火山引擎ECS 控制台创建 ecs.hpcpni3ln.45xlarge 规格的云服务器(邀测实例规格,需开通白名单使用,欢迎联系客户经理申请);
为提高部署效率,系统镜像推荐选择预装 GPU 驱动的镜像(例如:Ubuntu 22.04 with GPU Driver 535.161.08 and doca)。
登录目标实例安装 Docker 等相关容器环境,如果有 Docker 环境可忽略 2~4 步骤;
确认 docker 环境及 runtime 可以根据以下命令,
root@iv-ydt4e4fh1cbw80bh8228:~#dockerinfo|grep-iruntimeRuntimes:io.containerd.runc.v2nvidiaruncDefaultRuntime:runc
安装步骤
sudoaptupdatesudoaptinstallca-certificatescurlgnupglsb-releasesudomkdir-p/etc/apt/keyringscurl-fsSLhttps://mirrors.ivolces.com/docker/linux/ubuntu/gpg|sudogpg--dearmor-o/etc/apt/keyrings/docker.gpgecho"deb[arch=$(dpkg--print-architecture)signed-by=/etc/apt/keyrings/docker.gpg]https://mirrors.ivolces.com/docker/linux/ubuntu$(lsb_release-cs)stable"|sudotee/etc/apt/sources.list.d/docker.list>/dev/nullsudoaptupdatesudoaptinstalldocker-cedocker-ce-clicontainerd.iodocker-compose-plugin-y
curl-shttps://mirrors.ivolces.com/nvidia_all/ubuntu2204/x86_64/3bf863cc.pub|sudoapt-keyadd-cat<<EOF>/etc/apt/sources.list.d/nvidia.listdebhttp://mirrors.ivolces.com/nvidia_all/ubuntu2204/x86_64//EOFaptupdateaptinstallnvidia-container-toolkit-y
sudonvidia-ctkruntimeconfigure--runtime=dockersudosystemctlrestartdocker
dockerpullai-containers-cn-beijing.cr.volces.com/deeplearning/tensorrt-llm:quant_v3
ounter(lineounter(lineounter(linedockerrun--gpusall-itd--net=host--shm-size=100g--ulimitmemlock=-1--ulimitstack=67108864--privileged--ipc=host--security-optseccomp=unconfined--cap-add=ALL-v/var/run/nvidia-topologyd/:/var/run/nvidia-topologyd/${IMAGE}/bin/bashonionddownloadmodelDeepSeek-R1-W4AFP8
❝oniond 是火山自研模型下载器,可使用 oniond list models 查看当前支持拉取的模型;
❞
a. 执行以下命令,通过 NVIDIA TensorRT Model Optimizer 工具生成 activations 的量化系数;
oniond download model DeepSeek-R1PATH_OF_DEEPSEEK_R1=/llm-models/DeepSeek-R1/DeepSeek-R1#安装ModelOptgitclonehttps://github.com/NVIDIA/TensorRT-Model-Optimizer/ &&cdmodeloptpip install"nvidia-modelopt[all]"-U --extra-index-url https://pypi.nvidia.com#转化模型精度python inference/convert.py --hf-ckpt-path$PATH_OF_DEEPSEEK_R1--save-path ds_r1 --n-experts 256 --model-parallel 8 &&cd..#准备激活文件torchrun --nproc-per-node 8 --master_port=12346 ptq.py --model_path DeepSeek-V3/ds_r1 --config DeepSeek-V3/inference/configs/config_671B.json --quant_cfg FP8_DEFAULT_CFG --output_path ds_r1_fp8_per_tensor_calibration
b. 执行以下命令,完成 DeepSeek-R1 模型的权重量化与集成;
#/app/tensrrt_LLm/model.sh#!/bin/bashHF_MODEL_DIR=/path/to/DeepSeek-R1/OUTPUT_DIR=/workspace/ckpt/#这里act_scales.safetensorscongs从上述模型中获取ACT_SCALES=/path/to/DeepSeek-R1-W4AFP8/act_scales.safetensors#也可以从a步骤中获取文件,ACT_SCALES=ds_r1_fp8_per_tensor_calibrationif[ ! -d"convert_logs"];thenmkdirconvert_logsfipids=()foriin0 1 2 3 4 5 6 7dopython examples/quantization/quantize_mixed_precision_moe.py --model_dir$HF_MODEL_DIR--output_dir$OUTPUT_DIR--act_scales$ACT_SCALES--parts 9 --rank$i> convert_logs/log_$i2>&1 &pids+=($!)donepython examples/quantization/quantize_mixed_precision_moe.py --model_dir$HF_MODEL_DIR--output_dir$OUTPUT_DIR--act_scales$ACT_SCALES--parts 9 --rank 8 > convert_logs/log_8 2>&1pids+=($!)forpidin${pids[@]};dowait$piddoneecho"All processes completed!"
除了 DeepSeek-R1 的模型量化以及部署,W4A8 量化后的模型效果也是我们关注的重点。我们基于 MMLU 和 MATH-500 两个基准测试进行比较,W4A8 量化版 DeepSeek-R1 的性能对比 FP8 数据精度的版本差异在 0.5% 以内;
完成模型以后,可以通过下面命令进行快速验证,证明模型的可用性:
pythonexamples/pytorch/quickstart_advanced.py--model_dir$CKPT_PATH--tp_size8--moe_ep_size8--moe_tp_size1
本文以 MMLU 测试集为例介绍了如何进行模型精度评估,执行以下命令下载 MMLU 的测试数据集,并完成模型精度的评测;
#下载数据集wgethttps://people.eecs.berkeley.edu/~hendrycks/data.tar && tar -xf data.tar#精度评估trtllm-eval --model $CKPT_PATH --backend pytorch --tp_size8--ep_size8--kv_cache_free_gpu_memory_fraction0.75mmlu --dataset_path $PATH_TO_MMLU_DATA#MMLU weighted average accuracy 86.88(14042)
同时,也可以通过以下命令来完成模型吞吐以及 TTFT、TPOT 等相关指标的性能评测;
#准备数据集DS_R1_MODEL_PATH=/path/to/DeepSeek-R1python/app/tensorrt_llm/benchmarks/cpp/prepare_dataset.py \--stdout--tokenizer ${DS_R1_MODEL_PATH} \token-norm-dist \--input-mean1000--output-mean1000\--input-stdev0--output-stdev0\--num-requests2000>/tmp/synthetic_1000_1000.txtcat<<EOF>/workspace/extra-llm-api-config.ymlenable_attention_dp:falsepytorch_backend_config:enable_overlap_scheduler:trueuse_cuda_graph:truecuda_graph_padding_enabled: truesprint_iter_log:trueEOFtrtllm-bench--model$CKPT_PATH--model_path$CKPT_PATHthroughput--backend pytorch--max_batch_size128--max_num_tokens1127--dataset/tmp/synthetic_1000_1000.txt--tp8--ep8--kv_cache_free_gpu_mem_fraction0.8--extra_llm_api_options/workspace/extra-llm-api-config.yml--concurrency128--num_requests640--streaming--report_json/workspace/logs/mtp/bench_log_2node_bs128_ep8_tp16_conc128_aa_latency.json
执行以下命令,启动模型在线服务;
trtllm-serve$CKPT_PATH--hostlocalhost--port8000--backendpytorch--max_batch_size128--max_num_tokens3627--tp_size8--ep_size8--kv_cache_free_gpu_memory_fraction0.8--extra_llm_api_options/workspace/extra-llm-api-config.yml
到这里,我们就正式完成了 DeepSeek-R1 模型的量化和部署,可以通过本地 curl 命令调用 API 来使用模型推理服务了。
curl-XPOSThttp://0.0.0.0:8080/v1/chat/completions-H"Content-Type:application/json"-d"model":"/path/to/model","messages":[{"role":"user","content":"请证明一下黎曼猜想"}],"max_tokens":100,"temperature":0.7}通过以上步骤指引,用户可以在火山 GPU 云服务器上实现 W4A8 量化版 DeepSeek-R1 的高效部署,有效降低 DeepSeek-R1 模型的部署门槛,在充分发挥 W4A8 量化技术带来的性能优势的同时,助力火山引擎的用户快速将先进的 AI 模型应用到实际业务中去。
❝未来,火山引擎也将基于 GPU 云服务器的硬件加速能力,为火山引擎的客户持续提供从数据加载、模型训练和推理以及网络传输的全链路加速方案,助力业务在火山引擎的高速落地和部署加速。
❞
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |