如何在NVIDIA Jetson AGX Thor上部署1200亿参数大模型

描述

上一期介绍了如何在 NVIDIA Jetson AGX Thor 上使用 Docker 部署 vLLM 推理服务,以及使用 Chatbox 作为前端调用 vLLM 运行的模型(上期文章链接)。本期我们将尝试能否在 Jetson AGX Thor 上部署并成功运行高达 1,200 亿参数量的 gpt-oss-120b 大模型。

gpt-oss-120b 是由 OpenAI 于今年发布的开放权重 AI 模型,采用了广受欢迎的混合专家模型(MoE)架构和 SwigGLU 激活函数。其注意力层使用 RoPE 技术,上下文规模为 128k,交替使用完整上下文和长度为 128 个 Token 的滑动窗口。模型的精度为 FP4,可运行在 NVIDIA Blackwell 架构 GPU 上。

本期具体内容包括:

vLLM 镜像下载及容器构建

模型下载与运行

使用 Chatbox 作为前端调用 gpt-oss-120b

Jetson AGX Thor 模型运行资源占用及性能

一、vLLM 镜像下载及容器构建

参考上期教程,拉取 vLLM 镜像并构建容器。

1. 在命令行运行 docker pull nvcr.io/nvidia/vllm:25.10-py3 下载容器。

AI

2. 下载完成后,运行容器,创建启动命令。

AI

3. 容器创建成功后,使用 docker exec -it vllm /bin/bash 命令进入此容器。

AI

二、模型下载与运行

1. 在线下载模型并运行

1.1 登录 Hugging Face,下载 gpt-oss-120b 模型。

容器内执行 huggingface-cli login,输入 Hugging Face 的token,出现“Login successful”即表示登录成功。

AI

注:token 获取方式为注册并登录 huggingface.co,点击右上角用户头像 -Access Tokens,然后在新页面点击 Create new token,输入 token name,最后在最下方点击 Create token,复制并保存即可。

AI

AI

AI

AI

上下滑动查看图片

1.2 容器内运行 vllm serve openai/gpt-oss-120b,从 Hugging Face 上在线下载模型并开始运行。

AI

1.3 等待模型文件下载完成后(需科学上网),出现 API 端口号即可进行调用。

AI

2. 本地模型运行

上述方法会将模型文件下载至容器的默认目录,再次运行时将直接调用已下载的文件。为避免容器删除导致文件丢失,建议将模型文件复制到本地映射的目录(如 /data)中进行保存。

以在当前路径举例,命令行执行以下代码,即可保存到本地指定目录:

 

cp -r models--openai--gpt-oss-120b /data

 

AI

我们将本地模型文件命名为:local/gpt-oss-120b,容器内命令行执行以下命令,即可正常运行本地模型:

 

vllm serve 
/data/models--openai--gpt-oss-120b/snapshots/b5c939de8f754692c1647ca79f
bf85e8c1e70f8a --served-model-name "local/gpt-oss-120b"

 

AI

模型运行成功:

AI

三、使用 Chatbox 作为前端调用 gpt-oss-120b

Chatbox AI 是一款 AI 客户端应用和智能助手,支持众多先进的 AI 模型和 API,可在 Windows、MacOS、Android、iOS、Linux 和网页版上使用。在这里,可以选择 Chatbox 作为前端调用 vLLM 运行的 gpt-oss-120b 模型,用于本地或在线与 AI 进行对话。

1. 参考上期教程,局域网内下载安装 Chatbox Windows 版本,点击“设置提供方” — “添加”,输入模型名称,再次点击“添加”。

AI

AI

AI

上下滑动查看图片

2. API 主机可输入 Jetson AGX Thor 主机 IP 以及 vLLM 服务端口号。

(例:http://192.168.23.107:8000)

AI

3. 选择 vLLM 运行的模型,点击“+”。

AI

AI

注:这里同样可以添加前述步骤已保存或通过其他方式获取的模型文件。

AI

4. 点击“新对话”,右下角选择该模型即可开启对话。

AI

5. 运行示例

我们在此示例提问一个问题,运行结果如下:

以上视频已作 3 倍加速处理

四、Jetson AGX Thor 模型运行资源占用及性能

接下来分析运行 gpt-oss-120b 时的资源使用情况。

命令行执行 jtop 命令,可见加载完模型后,内存占用约为 115G。

AI

当模型在进行推理任务时,部分 CPU 核心持续满载,同时 GPU 使用率也维持在 95% 左右的高位。

AI

我们使用 AI 生成的脚本,测试了输入 128 tokens、输出 128 tokens 且并发数为 1 时的吞吐量。

容器内执行:

 

# 创建测试脚本
cat > /tmp/test_performance.py << 'EOF'
import time
import requests
import json
import statistics


# 配置
API_URL = "http://localhost:8000/v1"
MODEL_NAME = "local/gpt-oss-120b"
NUM_REQUESTS = 30


# 生成大约128个token的prompt(英文)
prompt_words = []
# 添加一些常见单词来达到约128个token
for i in range(32):
    prompt_words.append(f"Sentence {i+1}: Artificial intelligence is transforming various industries through automation and data analysis.")


prompt = " ".join(prompt_words)
print(f"Prompt length (words): {len(prompt.split())}")


results = []
total_tokens = 0


print(f"Starting benchmark with {NUM_REQUESTS} requests...")
print(f"Model: {MODEL_NAME}")
print(f"Input tokens: ~128, Output tokens: 128")
print("-" * 60)


for i in range(NUM_REQUESTS):
    payload = {
        "model": MODEL_NAME,
        "prompt": prompt,
        "max_tokens": 128,
        "temperature": 0.1,
        "top_p": 0.9
    }
    
    try:
        start_time = time.time()
        response = requests.post(
            f"{API_URL}/completions",
            json=payload,
            timeout=300
        )
        end_time = time.time()
        
        if response.status_code == 200:
            result = response.json()
            latency = end_time - start_time
            results.append(latency)
            
            # 估算生成的token数
            generated_text = result["choices"][0]["text"]
            output_tokens = len(generated_text.split())
            total_tokens += 128 + output_tokens  # 输入 + 输出
            
            print(f"Request {i+1:3d}: latency={latency:.2f}s, output_tokens={output_tokens}")
        else:
            print(f"Request {i+1:3d}: Failed with status {response.status_code}")
            
    except Exception as e:
        print(f"Request {i+1:3d}: Error - {e}")
    
    # 稍微延迟一下,避免压力过大
    time.sleep(0.1)


# 计算统计信息
if results:
    total_time = sum(results)
    avg_latency = statistics.mean(results)
    throughput_tokens = total_tokens / total_time
    
    # 计算百分位数
    sorted_latencies = sorted(results)
    p50 = sorted_latencies[int(len(sorted_latencies) * 0.5)]
    p95 = sorted_latencies[int(len(sorted_latencies) * 0.95)]
    p99 = sorted_latencies[int(len(sorted_latencies) * 0.99)]
    
    print("
" + "="*60)
    print("PERFORMANCE RESULTS")
    print("="*60)
    print(f"Model: {MODEL_NAME}")
    print(f"Total requests: {NUM_REQUESTS}")
    print(f"Successful requests: {len(results)}")
    print(f"Total test time: {total_time:.2f}s")
    print(f"
Latency Statistics:")
    print(f"  Average latency: {avg_latency:.2f}s")
    print(f"  P50 latency: {p50:.2f}s")
    print(f"  P95 latency: {p95:.2f}s")
    print(f"  P99 latency: {p99:.2f}s")
    print(f"
Throughput:")
    print(f"  Total tokens: {total_tokens}")
    print(f"  Throughput: {throughput_tokens:.2f} tokens/second")
    print(f"  Average per request: {total_tokens/len(results):.1f} tokens")
    print("="*60)
else:
    print("No successful requests!")
EOF

 

滑动查看完整代码

命令行执行:

 

python /tmp/test_performance.py

 

AI

AI

根据上图的测试结果,在单用户、输入 / 输出长度为 128 tokens、并发数为 1 的条件下,系统吞吐量达到了 50.38 tokens / second。这意味着在 Jetson AGX Thor 上能够流畅运行 1,200 亿参数模型。

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分