使用 NVIDIA NIM 加速 Hugging Face 上的 LLM 世界

社区文章 发布于 2025 年 7 月 21 日

AI 开发者希望选择最新的大型语言模型 (LLM) 架构和专门的变体,用于AI 代理和其他应用程序,但处理所有这些多样性会减慢测试和部署管道。特别是,管理和优化不同的推理软件框架以在各种 LLM 和服务要求下实现最佳性能,是阻碍将高性能 AI 应用程序交付给最终用户的耗时瓶颈。

NVIDIA AI 客户和生态系统合作伙伴利用 NVIDIA NIM 推理微服务,以简化在 NVIDIA 加速基础设施上部署最新 AI 模型,包括来自 NVIDIA、Meta、Mistral AI、Google 和数百个更多创新模型构建者的 LLM、多模态和领域特定模型。我们看到客户和合作伙伴通过简化、可靠的模型部署方法更快地实现了更多创新,今天我们很高兴能通过 NIM 快速可靠地部署 Hugging Face 上的超过 100,000 个 LLM。

用于部署各种 LLM 的单个 NIM 微服务

NIM 现在提供一个单一的 Docker 容器,用于部署 NVIDIA 和社区(包括 NVIDIA TensorRT-LLM、vLLM 和 SGLang)领先的推理框架支持的各种 LLM。当 LLM 提供给 NIM 容器时,它无需手动配置即可执行部署和性能优化的几个步骤。

LLM 适应阶段 NIM 的作用
模型分析 NIM 自动识别模型的格式,包括 Hugging Face 模型、TensorRT-LLM 检查点或预构建的 TensorRT-LLM 引擎,确保兼容性。
架构和量化检测 它识别模型的架构(例如 Llama、Mistral)和量化格式(例如 FP16、FP8、INT4)。
后端选择 基于此分析,NIM 选择一个推理后端(NVIDIA TensorRT-LLM、vLLM 或 SGLang)。
性能设置 NIM 对所选模型和后端应用预配置设置,然后启动推理服务器,减少手动调整工作。

表 1. NVIDIA NIM LLM 适应阶段和功能

单个 NIM 容器支持常见的 LLM 权重格式,包括

  • Hugging Face Transformers 检查点:LLM 可以直接从 Hugging Face 仓库部署,使用.safetensors文件,无需复杂的转换。
  • GGUF 检查点:支持的模型架构的量化 GGUF 检查点可以直接从 Hugging Face 或从本地下载的文件部署。
  • TensorRT-LLM 检查点:打包在 trtllm_ckpt 目录中,并为 TensorRT-LLM 优化的模型可以部署。
  • TensorRT-LLM 引擎:来自 trtllm_engine 目录的预构建 TensorRT-LLM 引擎可用于 NVIDIA GPU 上的最佳性能。

开始使用

要使用 NIM,请确保您的环境已安装 NVIDIA GPU(带有合适的驱动程序,CUDA 12.1+)、Docker,并拥有用于 NIM Docker 镜像的 NVIDIA NGC 账户和 API 密钥,以及用于需要身份验证的模型的 Hugging Face 账户和 API 令牌。有关环境先决条件的更多信息,请参阅 NIM 文档

环境设置涉及设置环境变量和创建持久缓存目录。确保 nim_cache 目录具有正确的 Unix 权限,理想情况下由启动 Docker 容器的同一 Unix 用户拥有,以防止权限问题。命令使用 -u $(id -u) 来管理此问题。

为了方便使用,让我们将一些常用信息存储在环境变量中。

# A variable for storing the NIM docker image specification
NIM_IMAGE=llm-nim
# Populate with your Hugging Face API token.
HF_TOKEN=<your_huggingface_token>

示例 1:部署模型

使用 Codestral-22B 演示了从 Hugging Face 部署 LLM。

docker run --rm --gpus all \
  --shm-size=16GB \
  --network=host \
  -u $(id -u) \
  -v $(pwd)/nim_cache:/opt/nim/.cache \
  -v $(pwd):$(pwd) \
  -e HF_TOKEN=$HF_TOKEN \
  -e NIM_TENSOR_PARALLEL_SIZE=1 \
  -e NIM_MODEL_NAME="hf://mistralai/Codestral-22B-v0.1" \
  $NIM_IMAGE

对于本地下载的模型,将 NIM_MODEL_NAME 指向路径并挂载目录。

docker run --rm --gpus all \
  --shm-size=16GB \
  --network=host \
  -u $(id -u) \
  -v $(pwd)/nim_cache:/opt/nim/.cache \
  -v $(pwd):$(pwd) \
  -v /path/to/model/dir:/path/to/model/dir \
  -e HF_TOKEN=$HF_TOKEN \
  -e NIM_TENSOR_PARALLEL_SIZE=1 \
  -e NIM_MODEL_NAME="/path/to/model/dir/mistralai-Codestral-22B-v0.1" \
  $NIM_IMAGE

在部署模型时,请随意检查输出日志,以了解 NIM 在模型部署期间所做的选择。部署的模型可在 https://:8000 访问,API 端点在 https://:8000/docs

底层引擎提供了额外的参数。您可以通过在容器中运行 nim-run --help 来查看此类参数的完整列表,如下所示。

docker run --rm --gpus all \
  --network=host \
  -u $(id -u) \
  $NIM_IMAGE nim-run --help

示例 2:指定后端

要检查兼容的后端或选择特定后端,请使用 list-model-profiles

docker run --rm --gpus all \
  --shm-size=16GB \
  --network=host \
  -u $(id -u) \
  -v $(pwd)/nim_cache:/opt/nim/.cache \
  -v $(pwd):$(pwd) \
  -e HF_TOKEN=$HF_TOKEN \
  $NIM_IMAGE list-model-profiles --model "hf://meta-llama/Llama-3.1-8B-Instruct"

此命令显示兼容的配置文件,包括 LoRA 适配器。要使用特定后端(如 vLLM)进行部署,请使用 NIM_MODEL_PROFILE 环境变量,并使用 list-model-profiles 提供的输出。

docker run --rm --gpus all \
  --shm-size=16GB \
  --network=host \
  -u $(id -u) \
  -v $(pwd)/nim_cache:/opt/nim/.cache \
  -v $(pwd):$(pwd) \
  -e HF_TOKEN=$HF_TOKEN \
  -e NIM_TENSOR_PARALLEL_SIZE=1 \
  -e NIM_MODEL_NAME="hf://meta-llama/Llama-3.1-8B-Instruct" \
  -e NIM_MODEL_PROFILE="e2f00b2cbfb168f907c8d6d4d40406f7261111fbab8b3417a485dcd19d10cc98" \
  $NIM_IMAGE

示例 3:量化模型部署

NIM 方便了量化模型的部署。它会自动检测量化格式(例如 GGUF、AWQ),并使用标准部署命令选择合适的后端。

# Choose a quantized model and populate the MODEL variable, for example:
# MODEL="hf://modularai/Llama-3.1-8B-Instruct-GGUF"
# or
# MODEL="hf://Qwen/Qwen2.5-14B-Instruct-AWQ"
docker run --rm --gpus all \
  --shm-size=16GB \
  --network=host \
  -u $(id -u) \
  -v $(pwd)/nim_cache:/opt/nim/.cache \
  -v $(pwd):$(pwd) \
  -e HF_TOKEN=$HF_TOKEN \
  -e NIM_TENSOR_PARALLEL_SIZE=1 \
  -e NIM_MODEL_NAME=$MODEL \
  $NIM_IMAGE

对于高级用户,NIM 提供了通过环境变量(例如用于上下文长度的 NIM_MAX_MODEL_LEN)进行自定义的功能。对于大型 LLM,NIM_TENSOR_PARALLEL_SIZE 启用多 GPU 部署。确保将 --shm-size=<shared memory size> 传递给 Docker 以进行多 GPU 通信。

NIM 容器支持 NVIDIA TensorRT-LLM、vLLM 和 SGLang 支持的各种 LLM,包括 Hugging Face 上的流行 LLM 和专门的变体。有关支持的 LLM 的更多详细信息,请参阅文档

使用 Hugging Face 和 NVIDIA 进行构建

NIM 旨在简化 NVIDIA 加速基础设施上的 AI 模型部署,加快高性能 AI 开发者和企业 AI 团队的创新和价值实现。我们期待与 Hugging Face 社区的交流和反馈。

访问 build.nvidia.com,在 NVIDIA 托管的计算环境中开始使用开发者示例。

社区

我尝试了您的命令,尽管 docker 登录成功并且我可以在容器注册表中看到 nim-llm,但它似乎不允许访问

$ docker login nvcr.io
Authenticating with existing credentials...
Login Succeeded
$ export NIM_IMAGE=llm-nim
export HF_TOKEN=hf_...
export MODEL=hf://microsoft/Phi-3-mini-4k-instruct-gguf
export NGC_API_KEY=nv...
export LOCAL_NIM_CACHE=~/.cache/nim
docker run --rm --gpus all \
  --shm-size=16GB \
  --network=host \
  -u $(id -u) \
  -v $(pwd)/nim_cache:/opt/nim/.cache \
  -v $(pwd):$(pwd) \
  -e HF_TOKEN=$HF_TOKEN \
  -e NIM_TENSOR_PARALLEL_SIZE=1 \
  -e NIM_MODEL_NAME=$MODEL \
  -e NGC_API_KEY \
  -e NIM_RELAX_MEM_CONSTRAINTS=1 \
  $NIM_IMAGE
Unable to find image 'llm-nim:latest' locally
docker: Error response from daemon: pull access denied for llm-nim, repository does not exist or may require 'docker login': denied: requested access to the resource is denied.
See 'docker run --help'.
·

同样的问题

注册登录 发表评论