使用 NVIDIA NIM 部署本地 LLAMA-3:全面指南

使用 NVIDIA NIM 部署本地 LLAMA-3:全面指南 - 了解如何使用 NVIDIA NIM 部署 LLAMA-3 模型,在您的云端或本地机器上进行高效推理。涵盖设置、性能测试和与 OpenAI API 的集成。

2025年2月24日

party-gif

利用我们关于使用 NVIDIA 的 NIM 自托管和部署 LLAMA-3 模型的指南,释放大型语言模型的力量。探索如何利用这项尖端技术来加速您的 AI 项目并获得无与伦比的性能。

如何部署NVIDIA NIM进行大型语言模型推理

要在您自己的云端或本地机器上使用NVIDIA NIM部署Lama系列模型,请按照以下步骤操作:

  1. 设置环境: 如果在本地机器上运行,请安装Docker引擎和NVIDIA容器工具包。这些链接在视频描述中提供。

  2. 获取API密钥: 注册NVIDIA账户以生成您的API密钥和个人密钥。这些将用于与远程服务器交互。

  3. 运行Docker容器: 使用提供的Docker命令运行容器,指定容器名称、GPU使用情况、API密钥、模型缓存位置和端口。这将下载并设置Lama 3 80亿指令模型。

  4. 与模型交互: 使用提供的cURL命令与部署的模型交互。此命令遵循OpenAI API标准,允许您使用OpenAI客户端进行交互。

  5. 压力测试API: 使用带有requests库的Python脚本向API端点发送多个并发请求,并监控GPU利用率和吞吐量。

  6. 使用OpenAI API客户端: 演示如何使用OpenAI API客户端与NVIDIA NIM交互,方法是更新基URL和其他参数以匹配部署的模型。

NVIDIA NIM提供了一种方便且优化的方式来部署大型语言模型进行推理,可以实现高达3倍的性能提升,相比其他部署选项。90天免费试用让您可以进一步探索这个解决方案。

访问NVIDIA Launchpad和GPU指标仪表板

要访问NVIDIA Launchpad和GPU指标仪表板,请按照以下步骤操作:

  1. 作为NVIDIA Launchpad的一部分,您可以访问代码IDE,即Visual Studio Code。您可以使用此IDE与GPU实例交互并部署Llama 3 80亿指令模型。

  2. GPU指标仪表板是一个Grafana仪表板,提供有关GPU使用情况和性能的详细信息。您可以访问此仪表板来监控GPU利用率、CUDA版本、GPU驱动程序和其他相关指标。

  3. Grafana仪表板提供了GPU使用情况随时间变化的可视化表示,允许您跟踪性能并相应地优化部署。

  4. 您可以在终端中使用watch命令实时监控GPU使用情况。命令watch -n 1 nvidia-smi将每秒更新一次GPU使用情况,为您提供GPU利用率的实时视图。

  5. GPU指标仪表板和实时监控工具允许您了解Llama 3 80亿指令模型部署的性能特征,帮助您优化资源利用并确保高效的推理。

设置NVIDIA NIM Docker容器

要使用NVIDIA NIM部署Llama 3 80亿指令模型,请按照以下步骤操作:

  1. 打开提供的IDE,确保您有权访问H100 GPU。
  2. 通过注册NVIDIA账户并生成必要的密钥来设置您的API密钥。
  3. 运行以下Docker命令启动NVIDIA NIM容器:
docker run -it --gpus all -e NVIDIA_API_KEY=$NVIDIA_API_KEY -p 8000:8000 --name llama-3-8b-instruct nvcr.io/nvidia/nim:latest --model-name llama-3-8b-instruct

此命令将:

  • 创建一个名为"llama-3-8b-instruct"的Docker容器
  • 使用系统上的所有可用GPU
  • 设置NVIDIA_API_KEY环境变量
  • 公开端口8000以供NIM服务器使用
  • 使用NVIDIA NIM目录中的"llama-3-8b-instruct"模型
  1. 容器运行后,您可以使用提供的cURL命令与模型交互:
curl -X POST -H "Content-Type: application/json" -d '{"model": "llama-3-8b-instruct", "prompt": "Tell me a joke.", "max_tokens": 1000, "temperature": 0.7, "top_p": 0.95, "stop": ["\n"]}' http://localhost:8000/v1/completions

此cURL命令向在localhost:8000上运行的NIM服务器发送请求,以生成"Tell me a joke."的响应。

  1. 要压力测试API端点,您可以运行提供的Python脚本test_server.py。此脚本将向NIM服务器发送多个并发请求并监控GPU利用率。

  2. 最后,您也可以使用OpenAI API客户端与NIM服务器交互,方法是将基URL更新为指向NIM服务器的地址和端口。

通过遵循这些步骤,您可以成功使用NVIDIA NIM Docker容器部署Llama 3 80亿指令模型并测试其性能。

与NVIDIA NIM API交互

要与NVIDIA NIM API交互,我们可以使用一个简单的cURL命令。cURL命令提供以下功能:

  • 向本地主机的8000端口(即NVIDIA NIM服务器运行的位置)发送POST请求。
  • 使用OpenAI兼容的API,因此我们可以使用OpenAI客户端与NIM服务器交互。
  • 指定要使用的Llama 3 80亿指令模型。
  • 设置与OpenAI期望的消息结构类似的消息结构。
  • 允许设置max_tokenstemperature等其他参数。

以下是cURL命令:

curl -X POST -H "Content-Type: application/json" -d '{"model": "nlp/lama-3-8b-instruct", "messages": [{"role": "user", "content": "Tell me a joke"}], "max_tokens": 1000, "temperature": 0.7}' http://localhost:8000/v1/chat/completions

此cURL命令将向NVIDIA NIM服务器发送请求,服务器将使用Llama 3 80亿指令模型生成响应。响应将以流的形式返回,每个令牌都会显示为它被生成的时候。

为了进一步压力测试API端点,我们可以使用一个利用requests库的Python脚本来发送多个并发请求。该脚本将发送50个笑话生成请求,并监控GPU利用率和吞吐量。

import requests
import threading

url = "http://localhost:8000/v1/chat/completions"
headers = {"Content-Type": "application/json"}
payload = {
    "model": "nlp/lama-3-8b-instruct",
    "messages": [{"role": "user", "content": "Tell me 50 jokes"}],
    "max_tokens": 1000,
    "temperature": 0.7,
    "stream": False
}

def send_requests():
    for _ in range(50):
        response = requests.post(url, headers=headers, json=payload)
        print(response.json())

threads = []
for _ in range(10):
    t = threading.Thread(target=send_requests)
    t.start()
    threads.append(t)

for thread in threads:
    thread.join()

此脚本演示了如何使用OpenAI兼容的API与NVIDIA NIM服务器交互。它表明NVIDIA NIM服务器可以为大型语言模型提供高性能推理,与不使用NIM相比可以实现高达3倍的性能提升。

压力测试NVIDIA NIM API端点

要压力测试NVIDIA NIM API端点,我们将使用一个简单的Python脚本,利用requests库向API发送多个并发请求。以下是它的工作原理:

  1. 我们定义API端点URL,在本例中是本地主机,因为我们在本地运行服务器。如果您要在远程服务器上部署,则需要使用外部IP地址并启用端口转发。

  2. 我们设置必要的标头,包括将Content-Type标头设置为application/json

  3. 我们创建有效负载,其中包括模型名称("model": "llama-3-8b-instruct"),提示("prompt": "Tell me 50 jokes."),以及max_tokenstemperaturestop等其他参数。

  4. 我们定义一个send_requests()函数,该函数使用我们之前定义的URL、标头和有效负载通过requests.post()方法发送请求。

  5. 我们使用多线程同时运行send_requests()函数的多个实例,模拟向API端点发送大量请求。

  6. 我们使用watch命令和nvidia-smi工具实时监控GPU使用情况,这提供了GPU利用率的洞见。

输出显示,API端点能够处理大量并发请求,平均吞吐量约为每秒2,500个令牌。GPU利用率也保持相对较高,表明NVIDIA NIM能够有效利用硬件资源来提供高性能推理。

这个压力测试展示了NVIDIA NIM解决方案的可扩展性和性能,使其成为在生产环境中部署大型语言模型的一个引人注目的选择。

将NVIDIA NIM与OpenAI API客户端一起使用

要将OpenAI API客户端与NVIDIA NIM一起使用,请按照以下步骤操作:

  1. 将基URL更改为您的NVIDIA NIM实例的URL。在本例中,我们在localhost:8000上运行它:
openai.api_base = "http://localhost:8000"
  1. 您不需要提供API密钥,因为NVIDIA NIM会处理身份验证。

  2. 将模型设置为NVIDIA NIM托管的模型,在本例中为"meta-llama-38b-instruct":

model = "meta-llama-38b-instruct"
  1. 设置其他参数,如要生成的最大令牌数、温度和是否流式传输响应:
response = openai.ChatCompletion.create(
    model=model,
    messages=[{"role": "user", "content": "Tell me 50 different jokes"}],
    max_tokens=1024,
    temperature=0.7,
    stream=True,
)
  1. 遍历流式响应并打印生成的文本:
for chunk in response:
    print(chunk.choices[0].text, end="")

这种方法允许您利用NVIDIA NIM提供的性能和易部署性,同时使用熟悉的OpenAI API客户端。流式响应确保您可以实时获取生成的文本,提供响应式的用户体验。

结论

在本视频中,我们探讨了如何使用NVIDIA NIM在自己的云端或本地机器上部署Lama 3 80亿指令模型。NVIDIA NIM是NVIDIA开发的一套微服务,可加速基础模型(包括语言模型和其他AI模型)的部署。

我们已经介绍了设置NVIDIA NIM环境的步骤,包括生成API密钥和运行Docker容器来部署Lama 3模型。我们还通过同时发送多个请求并监控GPU利用率和吞吐量来测试部署模型的性能。

此外,我们还展示了如何使用OpenAI API客户端与NVIDIA NIM部署的模型进行交互,演示了与OpenAI API标准的兼容性。

总的来说,NVIDIA NIM提供了一种方便高效的方式来在生产环境中部署大型语言模型。利用NVIDIA的硬件和软件栈可以带来显著的性能提升,与其他部署选项相比。如果您对探索更多部署选项感兴趣,请务必订阅频道,了解即将推出的VLLM和其他相关主题的内容。

FAQ