NVIDIA H20-3e 141G Docker LLaMA Factory 训练与vllm 推理实战:解锁 Qwen2.5-14B 与 DeepSeek-R1-FP8 671B 的性能潜力

article/2025/7/21 13:22:08

简介

本文深度解析基于 NVIDIA H20-3e 141G GPU 的 AI 开发全流程,重点呈现其相比前代 H20 在硬件架构、显存容量(141GB vs 96GB)及计算效率上的跨越式升级。通过 LLaMA Factory 框架实现 Qwen2.5-14B 模型的监督微调(SFT)训练,结合 Transformer 引擎与多实例 GPU 技术,突破传统显存限制,实现混合精度训练吞吐量提升。在推理环节,vllm 引擎借助 H20-3e 的 FP8 计算核心与更快的 NVLink 互联,使 DeepSeek-R1-FP8 671B 超大模型的全量推理成为现实,实测单卡吞吐量较 H20 提升倍,同时保持数值精度一致性。文章还对比了 H20-3e 在训练稳定性、推理延迟等方面的优化表现,验证其作为新一代 AI 计算平台的技术优势。

平台部分

驱动安装

首先需要安装NVIDIA-driver-xxx以及NVIDIA Fabricmanager-xxx,这两者都可以通过apt安装或者通过NVIDIA 官网进行下载安装,安装部分不再赘述,其中后者尤其重要,因为其关乎NVLINK能否正常使用

安装docker

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker-archive-keyring.gpg
echo "deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker-archive-keyring.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io

配置NVIDIA-docker-toolkit

curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list
sudo apt-get install -y nvidia-container-toolkit
sudo nvidia-ctk runtime configure --runtime=docker
sudo systemctl restart docker

假如运行完上述代码后没有报错,说明已经安装成功

简单测试

直接从NGC拖适合驱动版本的m5c镜像,之后从GitHub - NVIDIA/cuda-samples at v12.4.1
与GitHub - wilicc/gpu-burn: Multi-GPU CUDA stress test,中下载即可

P2P 性能简单测试

GPU burn测试

不知道为什么,在跑到将近30秒的时候算力会突然倍增

训练部分

下载镜像

从NGC 镜像站中下载较新的pytorch 镜像PyTorch | NVIDIA NGC

docker pull nvcr.io/nvidia/pytorch:xx.xx-py3

然后本地通过下面的命令启动镜像,其中,network与ipc=host较为重要,决定了容器内网络的状态以及宿主机允许直通给容器的资源数量和性能

docker run -v 宿主机路径:容器内需要挂在的路径 --privileged --network=host --ulimit stack=68719476736  --ipc=host --entrypoint=/bin/bash --gpus all -it nvcr.io/nvidia/pytorch:xx.xx-py3

安装LLAMA Factory

git clone --depth 1 https://github.com/hiyouga/LLaMA-Factory.git
cd LLaMA-Factory
pip install -e ".[torch,metrics]"

在输入上述命令后,可能会出现一些在线或离线安装pip包的过程,其中有些包的兼容性可能存在冲突,但是假如是不常用的包可以直接不管

成功安装后,输入下面的命令,能成功运行即为安装成功

llamafactory-cli version

修改SFT配置文件

进入examples/train_lora/llama3_lora_sft.yaml配置文件

主要需要修改的有几点

modelnameorpah:根据本地或云端模型的路径位置修改

trust_remote_code: 假如模型在本地就删掉,假如是云端模型需要下载的就保留

dataset:数据集实际路径,也可以选择/data目录下有的示例数据集

cutoff lengh:实际输入padding长度,根据实际数据集输入修改

batch_size与accumulation_step:按需修改

启动训练

进入LLaMa factory 工程主目录

llamafactory-cli train ./examples/train_lora/llama3_lora_sft.yaml

训练占用

最后出现下图结果,即为训练完成

推理部分

下载镜像

docker pull docker.io/vllm/vllm-openai:v0.7.3
docker run -v 宿主机路径:容器内需要挂在的路径 --privileged --network=host --ulimit stack=68719476736  --ipc=host --entrypoint=/bin/bash --gpus all -it docker.io/vllm/vllm-openai:v0.7.3

启动后输入

vllm -v

出现下图即为安装成功

运行推理

首先,下载好全量的FP8 DeepSeek-R1 模型,然后输入(deepseek的模型推理命名一般就为deepseek-reasoner)

python3 -m vllm.entrypoints.openai.api_server --host 0.0.0.0 --max-model-len 65536 --max-num-batched-tokens 65536 --trust-remote-code --tensor-parallel-size 8 --gpu-memory-utilization 0.9 --served-model-name deepseek-reasoner   --model 容器内模型路径

最后出现图片中的结果,即为部署成功

实际部署占用

API 调用

首先需要pip 安装 openai

单并发

from openai import OpenAIclient = OpenAI(base_url="http://localhost:8000/v1",api_key="token-abc123",
)completion = client.chat.completions.create(model="deepseek-reasoner",messages=[{"role": "user", "content": "Hello!"}]
)print(completion.choices[0].message.content)

from openai import OpenAI
import threading
import queue
import sys
from concurrent.futures import ThreadPoolExecutor, as_completedclass AsyncStreamProcessor:def __init__(self, base_url="http://localhost:8000/v1", max_workers=4):self.client = OpenAI(base_url=base_url, api_key="None")self.max_workers = max_workersself.executor = ThreadPoolExecutor(max_workers=max_workers)def process_stream(self, response, output_queue):try:for chunk in response:if chunk.choices[0].delta.content is not None:output_queue.put(chunk.choices[0].delta.content)except Exception as e:output_queue.put(f"Error: {str(e)}")finally:output_queue.put(None)def print_output(self, output_queue, request_id):while True:content = output_queue.get()if content is None:breakprint(f"Request {request_id}: {content}", end="", flush=True)print()  # Final newlinedef process_single_request(self, prompt, request_id):output_queue = queue.Queue()try:response = self.client.chat.completions.create(model="/root/model/DeepSeek-R1-Distill-Qwen-32B/",messages=[{"role": "user","content": [{"type": "text","text": prompt}],}],temperature=0.6,stream=True)# Create and start the stream processing threadstream_thread = threading.Thread(target=self.process_stream, args=(response, output_queue))stream_thread.start()# Create and start the printing threadprint_thread = threading.Thread(target=self.print_output, args=(output_queue, request_id))print_thread.start()# Wait for both threads to completestream_thread.join()print_thread.join()return f"Request {request_id} completed"except Exception as e:return f"Request {request_id} failed: {str(e)}"def process_multiple_requests(self, prompts):futures = []# Submit all requests to the thread poolfor idx, prompt in enumerate(prompts):future = self.executor.submit(self.process_single_request,prompt,idx + 1)futures.append(future)# Wait for all requests to complete and get resultsresults = []for future in as_completed(futures):results.append(future.result())return resultsdef shutdown(self):self.executor.shutdown(wait=True)def main():# Example promptsprompts = ["""已知函数 $f(x) = \ln \frac{x}{2-x} + ax + b(x-1)^3$
(1) 若 $b=0$,且 $f'(x) \geq 0$,求 $a$ 的最小值;""","""已知函数 $f(x) = \ln \frac{x}{2-x} + ax + b(x-1)^3$
(2) 证明:曲线 $y=f(x)$ 是中心对称图形;""","""已知函数 $f(x) = \ln \frac{x}{2-x} + ax + b(x-1)^3$
(3) 若 $f(x) > -2$ 当且仅当 $1 < x < 2$,求 $b$ 的取值范围。"""]# Initialize the processor with 4 worker threadsprocessor = AsyncStreamProcessor(max_workers=4)try:# Process all requestsresults = processor.process_multiple_requests(prompts)# Print final resultsprint("\nFinal results:")for result in results:print(result)finally:# Ensure the thread pool is properly shut downprocessor.shutdown()if __name__ == "__main__":main()


http://www.hkcw.cn/article/rdmiTbrjSc.shtml

相关文章

AI率、AIGC痕迹过高?下面是多种降AIGC率保姆级教程的方法

当前&#xff0c;随着生成式人工智能&#xff08;AIGC&#xff09;技术的广泛应用&#xff0c;AI生成内容&#xff08;如论文、报告、文案等&#xff09;的“AI率”过高已成为普遍问题。许多平台和检测工具能通过分析语言模式、逻辑结构等特征&#xff0c;精准识别AI生成文本。…

Stable Diffusion初级使用心得:如何画出一幅好画和如何不受拘束的画出一幅好画!

作者&#xff1a;就是这个大橘会画画&#xff08;cpolar用户供稿&#xff09; 由AI生成 一、画好一幅画的实用技巧 精准提示词&#xff08;Prompt&#xff09;是关键 技巧1&#xff1a;分层描述 不要只写“画一只猫”&#xff0c;而是拆解细节&#xff1a; 一只橘色短毛猫&am…

卫宁健康WiNGPT3.0与WiNEX Copilot 2.2:医疗AI创新的双轮驱动分析

引言:医疗AI的双翼时代 在医疗信息化的浪潮中,人工智能技术的深度融入正在重塑整个医疗行业。卫宁健康作为国内医疗健康和卫生领域数字化解决方案的领军企业,持续探索AI技术在医疗场景中的创新应用。2025年5月10日,在第29届中国医院信息网络大会(CHIMA2025)上,卫宁健康…

2024最新【秋叶启动器Stable Diffusion V4.9版本更新教程】来了,附下载链接

做为AI绘画的主流工具之一&#xff0c;Stable Diffusion&#xff08;简称SD&#xff09;大部分人都不陌生&#xff0c;用的最多的可能就是秋葉大佬的一键启动整合包。它以资源整合、安装方便、界面友好&#xff0c;自动更新、完全免费&#xff0c;深受广大AI绘画爱好者的欢迎 前…

VsCode远程连接服务器后安装Github Copilot无法使用

VsCode远程连接服务器后安装Github Copilot无法使用 1.在Vscode的settings中搜索Extension Kind&#xff0c;如图所示&#xff1a; 2.点击Edit in settings.json&#xff0c;添加如下代码&#xff1a; "remote.extensionKind": {"GitHub.copilot": [&quo…

[SAP] 如何查询当前屏幕的Tcode?

事务代码Tcode是SAP中到达特定屏幕的快捷路径 如何查询以下屏幕的事务码Tcode&#xff1f; 要浏览当前所使用的屏幕的事务码&#xff0c;可以选择System | Status 这里的事务代码是[VA22]&#xff0c;它是Change Quotation的事务代码

java中IO流分为几种

Java中io流根据多个维度进行&#xff1a;有数据流的方向&#xff08;输入或者输出&#xff09;、处理的数据单位&#xff08;字节或者字符&#xff09;、流的功能以及流是否支持随机访问等&#xff1b; 按照数据流方向如何划分&#xff1f; 输⼊流&#xff08;Input Stream&a…

医生误将患者腹超做成阴超被停工 医院责令相关人员停工反思

5月30日,王女士因身体不适到苏州市立医院东区就诊。门诊医生给她开了腹部B超检查单,但在超声科检查时,医生却误做了阴道B超。王女士感到非常惊讶并立即询问医生这是什么项目,医生回答说是阴超。王女士回忆说,当时诊室内有两名医生,一名实习医生负责记录,另一名医生负责操…

刚刚!港股下挫,A50跌超2%,亚太股市全线下跌,黄金突然拉升……

受全球关税负面信息的打击,6月2日上午,亚太股市几乎全线下跌。截至发稿,恒生指数跌2.47%,恒生科技指数跌2.85%,台湾加权指数跌1.35%,日经225指数跌1.37%,澳大利亚普通股指数跌0.32%,韩国KOSPI指数涨0.21%。截至发稿,恒生金融业指数下跌2.2%,其中邮储银行股价下跌近4%…

端午档电影总票房破4亿 大幅超越去年

根据网络平台数据,截至6月2日12时47分,2025年端午档电影票房已突破4亿,远超去年同期水平。责任编辑:zhangxiaohua

六旬独居老太遭裸身邻居闯入 索赔维权进行中

福建厦门的一位独居女子在家睡觉时,突然感到有人触碰她的手臂。睁开眼后,她发现51岁的邻居竟然一丝不挂地站在床边,手已经碰到了她的手臂。这位女子名叫张大妈,现年60多岁,老伴去世后一直独自居住。那天凌晨两点多,张大妈被惊醒,看到邻居王某赤身裸体站在床边,手还搭在…

4名上海游客被困山顶悬崖边 暴雨夜紧急救援

5月31日晚,在浙江金华兰溪黄店镇,四名游客在登山过程中被困山顶悬崖边上。他们没有雨衣和保暖衣物,只穿着单薄T恤,而当晚正下着暴雨,情况十分危急。接警后,消防救援人员迅速赶往现场展开搜救。通过电话联系报警人得知,这四人于当日上午10时左右进山,因山路陡峭无法返回…

印81人因同情巴基斯坦被逮捕 社交媒体发帖引争议

印度阿萨姆邦首席部长萨尔马于6月1日宣布,该邦有81人因“同情”巴基斯坦被警方逮捕。此前,印巴两国因印控克什米尔地区的枪击事件发生严重冲突。萨尔马在声明中提到,印度一直在追踪社交媒体上反国家的帖子,并采取相应行动。法新社引述当地警方消息称,其中一人因为在社交媒…

[面试精选] 0234. 回文链表

文章目录 1. 题目链接2. 题目描述3. 题目示例4. 解题思路5. 题解代码6. 复杂度分析 1. 题目链接 234. 回文链表 - 力扣&#xff08;LeetCode&#xff09; 2. 题目描述 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &am…

【C++高级主题】命令空间(六):重载与命名空间

目录 一、候选函数与命名空间&#xff1a;重载的 “搜索范围” 1.1 重载集的构成规则 1.2 命名空间对候选函数的隔离 二、重载与using声明&#xff1a;精准引入单个函数 2.1 using声明与重载的结合 2.2 using声明的冲突处理 三、重载与using指示&#xff1a;批量引入命名…

ESG体系

文字来自腾讯元宝 ESG是什么&#xff1f; ESG体系是一套综合评估企业在环境&#xff08;Environmental&#xff09;、社会&#xff08;Social&#xff09;和治理&#xff08;Governance&#xff09; 三个维度表现的非财务绩效标准&#xff0c;旨在衡量企业可持续发展能力和长期…

首都博物馆票务系统已修复 故障致歉与处理公告

6月1日,首都博物馆在北京大运河博物馆微信公众号发布了一份关于“看见殷商”展票务故障的致歉与处理公告。公告提到,当天凌晨,馆内票务系统突发故障,导致部分观众购买的6月1日展览参观票被退票,票款已按原路退回。故障发生后,首都博物馆技术团队迅速进行抢修,现已修复系…

美证实:驻日美军基地有害化学物发生泄漏 或致健康危害

美国方面证实,驻日美军横田基地曾发生有害化学物质外泄事故,可能对当地民众健康造成威胁。2023年1月,位于东京都的美军横田基地发生了含有致癌性有机氟化合物(PFAS)的污水泄漏事故。事故发生后,美军未能妥善保管被污染的水。2025年4月,美国国防部发布报告,确认该事件存…

俄乌在备忘录问题上各执一词 谈判进展缓慢

土耳其外交部透露,俄乌第二轮会谈将于6月2日在伊斯坦布尔举行。此前在5月16日,伊斯坦布尔见证了俄乌双方三年多来的首次直接谈判,虽然达成了一些共识,但未取得突破性进展。此后,俄罗斯方面多次表示已准备好与乌克兰开启第二轮谈判。不过,近期俄乌双方在备忘录问题上仍存在…

外国游客因日本大地震预言取消行程 谣言影响旅游业

北京时间6月2日2时51分,日本北海道附近海域发生5.9级地震,震源深度55公里,震中位于北纬41.80度,东经143.75度。此前,当地时间5月31日17时37分左右,同一地区还发生了6.1级地震,最大震感为震度4,震源深度20公里。近期,一则关于日本将迎来大灾难的预言在社交平台疯传。该…