当前位置: 首页 > news >正文

tensorrt-llm0.20.0离线部署DeepSeek-R1-Distill-Qwen-32B

一、运行环境:

4张英伟达A6000

操作系统:Ubuntu 22.04.5 LTS

二、安装

2.1下载docker容器

docker pull nvcr.io/nvidia/tensorrt-llm/release

2.2运行容器

docker run   --gpus all -dit --name trtllm -p 9500:8000  -v /mnt/data/models:/workspace/models --shm-size=64G --ulimit stack=-1:-1 --ulimit memlock=-1:-1 --privileged --cap-add=ALL  --security-opt seccomp=unconfined  nvcr.io/nvidia/tensorrt-llm/release

2.3测试TensorRT-LLM

python -c "import tensorrt_llm; print(tensorrt_llm.__version__)"

显示如下内容表示正常:

2025-08-11 09:30:59,334 - INFO - flashinfer.jit: Prebuilt kernels not found, using JIT backend

[TensorRT-LLM] TensorRT-LLM version: 0.20.0

0.20.0

2.4测试cuda是否可用

python -c "import torch; print(torch.cuda.is_available())"

三、格式转换及生成TensorRT LLM引擎

3.1将HF权重转换为TensorRT LLM检查点(4张卡)

#cd /app/tensorrt_llm/examples/models/core/qwen

python convert_checkpoint.py --model_dir /workspace/models/DeepSeek-R1-Distill-Qwen-32B \

                              --output_dir /workspace/models/tllm_checkpoint_4gpu_fp16_32B \

                              --dtype float16 \

                              --tp_size 4

生成的内容如下:

DeepSeek-R1-Distill-Qwen-32B:从DeepSeek-R1-Distill-Qwen-32B下载

3.2构建TensorRT LLM引擎

从TensorRT LLM检查点构建TensorRT LLM引擎。引擎文件的数量也与用于运行推理的GPU数量相同。

trtllm-build --checkpoint_dir /workspace/models/tllm_checkpoint_4gpu_fp16_32B \

            --output_dir /workspace/models/trt_engines/fp16/32B-4-gpu/ \

            --gemm_plugin float16 \

--max_input_len 16000

大概26分钟就生成完成。

gemm_plugin包含:{auto,float16,float32,bfloat16,int32,fp8,nvfp4,disable}

max_input_len:默认为1024,长文本序列,增加到16000(文本转sql、数据分析报告的文本长度比较多)

生成的内容如下图:

四、发布成推理服务

4.1推理服务

#!/usr/bin/env bash

# =============== 配置区 ===============
model_dir="/workspace/models/trt_engines/fp16/32B-4-gpu/"

tokenizer_dir="/workspace/models/DeepSeek-R1-Distill-Qwen-32B"

LOG_FILE="/workspace/models/logs/trtllm_server.log"
PID_FILE="/workspace/models/logs/trtllm_server.pid"

# 创建日志目录
mkdir -p "$(dirname "$LOG_FILE")"

# =============== 检查依赖 ===============
if [ ! -d "$model_dir" ]; then
    echo "错误: 模型目录不存在: $model_dir" >&2
    exit 1
fi

# 检查是否已运行
if [ -f "$PID_FILE" ]; then
    if kill -0 $(cat "$PID_FILE") 2>/dev/null; then
        echo "服务已在运行,PID: $(cat $PID_FILE)"
        exit 1
    else
        echo "发现旧的PID文件,但进程未运行,已清理。"
        rm -f "$PID_FILE"
    fi
fi

# =============== 构建命令 ===============
cmd=(
    trtllm-serve serve
    "$model_dir"
    --tokenizer "$tokenizer_dir"
    --host 0.0.0.0
    --port 8000
    --tp_size 4
    --kv_cache_free_gpu_memory_fraction 0.5
    --max_seq_len 16384
    --max_num_tokens 8192
    --trust_remote_code
    --chat_template "/workspace/models/llama70_nonthinking.jinja"
)

# =============== 启动后台服务 ===============
echo "启动 TensorRT-LLM 服务..."
echo "日志路径:tail -f  $LOG_FILE"

# 使用 nohup 后台运行,输出重定向到日志文件
nohup "${cmd[@]}" >"$LOG_FILE" 2>&1 &

# 保存进程 PID
echo $! > "$PID_FILE"

echo "服务已启动,PID: $!"
echo "日志已重定向到: $LOG_FILE"
 

4.2请求

curl -X 'POST' \'http://172.26.142.154:9500/v1/chat/completions' \-H 'accept: application/json' \-H 'Content-Type: application/json' \-d '{"messages": [{"content": "角色:交通管理局公文大纲标题专家\n技能:精通政策法规解读、公文逻辑架构及标题凝练,能根据会议主题和发言人身份设计专业标题\n\n核心约束:\n1. 仅生成从“一、”开始的标题,最多5项,按发言流程排序\n2. 标题禁止使用逗号、引号、句号、开场/结束语等无效字段\n3. 禁止虚构内容、禁止重复表述、禁止输出相同或语义相近的标题\n4. 输出内容仅为纯标题列表,每项换行分隔,不附加任何说明、注释或重复段落\n5. 总字数不超过100字,确保简洁凝练\n6. 一旦生成,不得重复输出相同内容块\n\n输入参数:\n- 发言人:交通事故张处长\n- 主题:2025年国庆交通安全保障电话会议","role": "user"}],"model": "32B-4-gpu","max_tokens": 100,"stream": false,
"temperature": 0.3,
"top_p": 0.9,
"stop": ["\n\n", "发言人身份", "角色:"]
}'

返回结果

http://www.dtcms.com/a/327374.html

相关文章:

  • 第六十三章:AI模型的“跨界之旅”:不同硬件架构下的兼容性方案
  • Linux NAPI 实现机制深度解析
  • 【CDA 新一级】学习笔记第1篇:数据分析的时代背景
  • 【前端八股文面试题】【JavaScript篇7】什么是JavaScript的原型、原型链? 有什么特点
  • 【设计模式精解】Java实现责任链模式(职责链模式)优雅处理多级请求(概述,使用场景,优缺点,代码示例)
  • Rust:构造函数 new() 如何进行错误处理?
  • 信号(Signal)** 是一种进程间异步通信机制,用于通知进程发生发生了某种事件(如错误、用户中断等)
  • 疯狂星期四文案网第37天运营日记
  • Apache POI中通过WorkBook写入图片后出现导出PDF文件时在不同页重复写入该图片问题,如何在通过sheet获取绘图对象清除该图片
  • 通过限制对象的内存分配位置来实现特定的设计目标
  • 【数据结构入门】堆
  • powerbi本地报表发布到web,以得到分享链接
  • C99中的变长数组(VLA)
  • 什么是 Spring MVC?
  • 中扬立库与西门子深化技术协同 共绘智能仓储创新蓝图
  • clean install 和 clean package 的区别
  • JVM学习笔记-----图解方法执行流程
  • 百胜软件×华为云联合赋能,“超级国民品牌”海澜之家新零售加速前行
  • 【力扣494】目标和
  • 【软考中级网络工程师】知识点之 IP QoS 技术
  • JVM宝典
  • 面试八股之从Java到JVM层面深入解析ReentrantLock实现原理
  • 力扣top100(day01-05)--矩阵
  • 开放原子开源生态大会:麒麟信安加入openEuler社区AI联合工作组,聚焦操作系统开源实践与行业赋能
  • Linux下的软件编程——文件IO
  • Openlayers基础教程|从前端框架到GIS开发系列课程(24)openlayers结合canva绘制矩形绘制线
  • 循环神经网络
  • THCV215一种高速视频数据收发器,采用低电压差分信号(LVDS)技术支持高速串行数据传输,支持1080p/60Hz高分辨率传输
  • 【[特殊字符][特殊字符] 协变与逆变:用“动物收容所”讲清楚 PHP 类型的“灵活继承”】
  • Gradle(二)Gradle的优势、项目结构介绍