gVisor GPU 实战:为 Llama-2-7B-Chat-HF 构建 TensorRT 引擎的完整流程
gVisor GPU 实战为 Llama-2-7B-Chat-HF 构建 TensorRT 引擎的完整流程【免费下载链接】gvisorApplication Kernel for Containers项目地址: https://gitcode.com/GitHub_Trending/gv/gvisor本文基于 gVisor 仓库中 TensorRT 引擎构建指南 展开完整覆盖从创建带 GPU 的 Google Cloud 虚拟机、安装依赖、构建并运行 Triton 容器到模型转换、FP8 量化和最终生成 TensorRT 引擎的每一步操作。读完本文后你可以按照仓库给出的流程在 L4 GPU 上为 Llama-2-7B-Chat-HF 模型产出可在 Triton Inference Server 中加载的 FP8 引擎文件并理解 gVisor 测试体系如何消费这些引擎来验证沙箱容器内的 LLM 推理能力。这套流程的背景是gVisor 支持在沙箱中运行 GPU 工作负载而其 GPU 集成测试如 triton_test.go需要预先准备好经过优化的模型引擎。引擎的构建必须在真实的 NVIDIA GPU 机器上完成因此仓库把「如何准备一台 GPU 机器并构建引擎」沉淀成了这份独立指南。1. 创建带 GPU 的 Google Cloud VM指南的第一步是在 Google Cloud 上创建一台带加速器的虚拟机。仓库给出的推荐配置是us-central1-a区域的g2-standard-32机型挂载一张 NVIDIA L4 GPUexport IMAGEcommon-cu128-ubuntu-2204-nvidia-570-v20251009 export ZONEus-central1-a export INSTANCE_NAMEmodel-prep export MACHINE_TYPEg2-standard-32 export ACCELERATORtypenvidia-l4,count1 export PROJECTyour-project各变量的含义如下IMAGEDeep Learning 平台的公共镜像基于 Ubuntu 22.04预装 CUDA 12.8 与 NVIDIA 570 系列驱动镜像本身即由deeplearning-platform-release镜像项目提供ZONE/MACHINE_TYPE区域与机型L4 GPU 仅在特定区域可用g2-standard-32提供 32 vCPU适合单卡 L4 的模型编译任务ACCELERATOR指定nvidia-l4单卡。L4 显存为 24 GB足以容纳 Llama-2-7B 的 FP8 引擎PROJECT替换为你自己的 GCP 项目 ID。创建实例的命令gcloud compute instances create $INSTANCE_NAME \ --zone$ZONE \ --image$IMAGE \ --machine-type$MACHINE_TYPE \ --image-projectdeeplearning-platform-release \ --maintenance-policyTERMINATE \ --accelerator$ACCELERATOR \ --metadatainstall-nvidia-driverTrue \ --boot-disk-size4TB \ --boot-disk-typepd-ssd \ --boot-disk-device-nameboot-disk \ --no-shielded-secure-boot \ --project$PROJECT两个参数值得注意--metadatainstall-nvidia-driverTrue让 VM 启动时自动安装 NVIDIA 用户态驱动省去手动装驱动的步骤--boot-disk-size4TB因为接下来要在本机下载 HF 模型、构建 Docker 镜像并编译引擎磁盘占用较大仓库直接给到了 4 TB SSD 的保守配置如果你只做验证可以适当调小。--maintenance-policyTERMINATE表示宿主机维护时直接终止实例而非迁移编译类任务通常可以接受这种行为。2. 安装系统与 Docker 依赖登录新创建的 VM 后先补齐基础工具链sudo apt-get update sudo apt-get install -y ca-certificates curl gnupg neovim python3-dev其中ca-certificates、curl、gnupg是后续安装 Docker 官方安装脚本所必需的依赖python3-dev为后面在容器外用 Python 工具链做验证提供头文件。接着安装 Docker 并重启将当前用户加入docker组以便免sudo运行容器命令sudo systemctl restart docker sudo usermod -a -G docker $USER newgrp dockernewgrp docker让当前 shell 会话立即获得 docker 组权限避免注销重登。3. 构建并运行模型准备容器3.1 Dockerfile 解析仓库提供了专门的构建镜像 Dockerfile.llama-2-7b-chat-hf其结构值得逐段理解因为它决定了容器内具备哪些编译能力基础镜像nvidia/cuda:12.8.1-devel-ubuntu22.04。使用devel而非runtime变体因为trtllm-build等工具链接时需要 CUDA 头文件与开发库系统依赖一次性安装openmpi-bin、libopenmpi-dev、python3.10、python3-pip、python3-venv等。OpenMPI 是 TensorRT-LLM 多卡通信的依赖即便本次只做单卡tp_size 1也一并装好TensorRT-LLM 版本锁定通过构建参数TENSORRT_LLM_VERSION默认1.0.0以git clone --depth 1 --branch v1.0.0的方式浅克隆对应 tag 的源码到/TensorRT-LLM-1.0.0保证convert_checkpoint.py、quantize.py、trtllm-build三者来自同一版本避免工具链版本错配Python 虚拟环境在/opt/venv创建 venv 并把其bin目录前置到PATH使后续所有层的pip、huggingface-cli命令都落在隔离环境中不污染系统 Python模型下载huggingface-cli download meta-llama/Llama-2-7b-chat-hf --local-dir /llama-2-7b-chat-hf --token ${HF_TOKEN}。HF_TOKEN是构建参数ARG HF_TOKEN必须以--build-arg HF_TOKEN你的token传入。Llama-2 是受控模型Hugging Face 要求接受模型协议后签发 token 才能拉取权重这就是 README 中「Dont forget to provide your own HF token」的含义工作目录与依赖WORKDIR切到${TENSORRT_LLM_DIR}/examples/models/core/llama并执行pip install -r requirements.txt安装 Llama 示例所需的 Python 包。这一步同时意味着后面所有命令都假定当前目录是 TensorRT-LLM 仓库内的 Llama 示例目录。3.2 构建与运行在 VM 上把上述文件保存为Dockerfile.llama2-7b-chat-hf注意文件名与仓库内的连字符命名略有差异README 特意说明了这一对应关系然后docker build . -f Dockerfile.llama2-7b-chat-hf -t tensorrt:llama2-7b-chat-hf构建时记得追加--build-arg HF_TOKENtoken传入你的 Hugging Face 令牌。运行容器进入交互式 shelldocker run --rm -it --net host --shm-size25g --ulimit memlock-1 --ulimit stack67108864 --gpus all -p 8000:8000 tensorrt:llama2-7b-chat-hf bash参数逐项说明--net host让容器直接使用宿主机网络编译过程中的 pip/git 下载与本地调试都更简单--shm-size25g模型编译与量化涉及大量跨进程共享内存默认的 64 MB 共享内存不够用--ulimit memlock-1CUDA 需要锁页内存不限定memlock上限是 GPU 容器的常见要求--ulimit stack67108864将栈大小设为 64 MB避免 TensorRT-LLM 工具链深层调用栈溢出--gpus all把宿主机上的 GPU 全部暴露给容器-p 8000:8000映射 Triton 默认端口本流程主要用于引擎编译该端口为后续本地验证推理预留--rm -it退出后自动清理容器交互式分配 TTY。4. 模型转换、量化与引擎构建进入容器后当前目录即 TensorRT-LLM 仓库的 Llama 示例目录按顺序执行三个命令。4.1 转换检查点python convert_checkpoint.py \ --model_dir /llama-2-7b-chat-hf \ --output_dir /tllm_checkpoint_1gpu_tp1 \ --dtype float16 \ --tp_size 1convert_checkpoint.py是 TensorRT-LLM 仓库自带的脚本把 Hugging Face 格式的 Llama 权重转换成 TRT-LLM 内部检查点格式--model_dir指向第 3 节 Dockerfile 下载的模型目录/llama-2-7b-chat-hf--output_dir为输出目录命名1gpu_tp1表明这是单卡、张量并行度 1 的布局--dtype float16表示权重以 FP16 承载这是后续量化到 FP8 的中间态--tp_size 1张量并行大小为 1即不做多卡切分。4.2 量化为 FP8python3 ../../../quantization/quantize.py \ --dtypefloat16 \ --output_dir /tllm_checkpoint_1gpu_tp1 \ --model_dir /llama-2-7b-chat-hf \ --qformatfp8 \ --kv_cache_dtypefp8 \ --tp_size 1注意这里的../../../quantization/quantize.py是相对于当前工作目录即examples/models/core/llama向上三级回到 TensorRT-LLM 仓库根目录的quantization目录属于 TensorRT-LLM 仓库内部路径而不是 gVisor 仓库中的文件。关键参数--qformatfp8权重量化格式为 FP8。L4 属于 Ada 架构 GPU原生支持 FP8 计算FP8 相比 FP16 可以显著降低显存占用并提升推理吞吐--kv_cache_dtypefp8KV cache 同样用 FP8 存储进一步压缩长上下文的显存开销--output_dir覆盖式写回同一个检查点目录得到量化后的检查点。4.3 构建 TensorRT 引擎trtllm-build \ --checkpoint_dir /tllm_checkpoint_1gpu_tp1 \ --output_dir /engines/llama-2-7b-chat-hf/fp8/1-gpu/ \ --gemm_plugin auto \ --max_batch_size 1trtllm-build将量化检查点编译为.engine文件--output_dir的输出路径/engines/llama-2-7b-chat-hf/fp8/1-gpu/并非随意命名——它与 gVisor 测试侧 Triton 镜像的引擎目录约定严格对应见下文--gemm_plugin auto让构建器自动选择 GEMM 插件实现--max_batch_size 1限定引擎最大批大小为 1匹配单请求延迟测试场景。引擎编译完成后该目录下的.engine文件即可部署到 Triton Inference Server。5. 引擎在 gVisor 测试体系中的消费方式理解产物路径的用途有助于把这条流水线放回 gVisor 的整体语境中。仓库中真正拉起 Triton 服务做 LLM 推理测试的镜像是 Dockerfile.x86_64它与本文的构建流程首尾衔接该镜像从gs://gvisor/tests/l4/engines/llama-2-7b-chat-hf下载引擎——注意路径中的l4与llama-2-7b-chat-hf/fp8/1-gpu子目录正对应本指南第 4.3 步的输出约定也就是说本文构建出的引擎会被上传到该 GCS 桶供测试镜像拉取镜像基于nvcr.io/nvidia/tritonserver:25.08-trtllm-python-py3通过git sparse-checkout只取 TensorRT-LLM 仓库中triton_backend/all_models/inflight_batcher_llm与triton_backend/tools两个目录再用fill_template.py填充 preprocessing、postprocessing、tensorrt_llm_bls、ensemble、tensorrt_llm 五个config.pbtxt模板其中engine_dir:${MODEL_FOLDER}/tensorrt_llm/1指向第 4.3 步产出的引擎所在目录batching_strategy:inflight_fused_batching、decoupled_mode:true、max_queue_delay_microseconds等参数决定了批处理与推理模式最终CMD [tritonserver, --model-repository/models/]直接启动 Triton Server对外暴露 8000 端口。引擎就绪后gVisor 的集成测试通过 triton_test.go 验证 LLM 在沙箱容器中的行为客户端封装在 triton.go 中其关键流程是NewDocker使用gpu/triton镜像拉起容器并通过dockerutil.GPURunOpts探测宿主机 GPU 配置端口常量Port 8000与镜像 CMD 的 Triton 端口一致WaitUntilServing轮询/v2/health/ready健康端点直到服务端就绪WarmModel先发一条简短提示Reply with the single word: Hello强制触发模型加载并记录TimeToFirstByte作为模型加载时长指标实际推理走/v2/models/ensemble/generate_stream端点请求体由promptJSON结构序列化包含text_input、max_tokens与parameters如temperature流式响应按 token 逐块返回并拼接测试用例分别验证知识问答猫有几条腿期望出现 4与数学能力9 乘 10期望 90并用PromptUntil在回答不符预期时通过RaiseTemperature逐步提高温度重试以容忍 LLM 输出的随机性。测试在 test/gpu/BUILD 中注册为triton_test目标依赖//pkg/test/dockerutil与//test/gpu/triton两个包镜像构建侧gpu/triton被列入 tools/images.mk 的NON_TEST_IMAGES集合与gpu/ollama、gpu/vllm一样由仓库统一的镜像构建流程产出。6. 流程小结与适用前提整条流水线可以概括为GPU 虚拟机L4→ Docker 容器内固定 TensorRT-LLM v1.0.0 → HF 权重转换FP16→ FP8 量化含 KV cache→ trtllm-build 产出引擎 → 上传 GCS → Triton 测试镜像加载 → gVisor 沙箱测试验证。几点适用前提与限制需要注意该指南面向 Google Cloud NVIDIA L4 的组合gcloud命令、镜像名与区域选择都绑定 GCP在其他云或裸机上需要等价替换虚拟机创建步骤但容器内的转换、量化、编译命令不变TensorRT-LLM 版本被 Dockerfile 的TENSORRT_LLM_VERSION参数锁定为1.0.0而测试侧 Triton 镜像Dockerfile.x86_64通过git checkout 796891ba2a6959bad58c0da9645416c7264349e9固定了后端模板代码的版本两侧版本必须与所构建引擎兼容否则 Triton 加载引擎会失败--max_batch_size 1的引擎只服务于单请求场景若需要更大批量的生产部署需要回到第 4.3 步重新构建引擎本指南只负责「在 GPU 机器上产出引擎文件」引擎如何被 gVisor 沙箱内的容器安全使用GPU 直通与 nvproxy 隔离机制属于另一套文档范畴本文不做展开。按照以上步骤操作你就完成了 gVisor GPU 测试所依赖的 Llama-2-7B-Chat-HF FP8 TensorRT 引擎的完整构建链路并能让 triton_test.go 这类集成测试在真实硬件上闭环运行。【免费下载链接】gvisorApplication Kernel for Containers项目地址: https://gitcode.com/GitHub_Trending/gv/gvisor创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
上一篇/下一篇内容由系统自动关联
返回资讯列表 →