NVIDIA Nemotron 3 系列模型:从架构到部署的完整指南

关于UCloud(优刻得)旗下的compshare算力共享平台

UCloud(优刻得)是中国知名的中立云计算服务商,科创板上市,中国云计算第一股。

Compshare GPU算力平台隶属于UCloud,专注于提供高性价4090算力资源,配备独立IP,支持按时、按天、按月灵活计费,支持github、huggingface访问加速。

使用下方链接注册可获得20元算力金,免费体验10小时4090云算力,此外还有5090, 3090和P40,价格每小时只需要8毛,赠送的算礼金够用一整天。
https://www.compshare.cn/?ytag=GPU_lovelyyoshino_Lcsdn_csdn_display

0. 引言

2025年12月,NVIDIA正式发布了Nemotron 3系列开源大语言模型,这是继Nemotron系列前作之后的又一重大突破。随着企业从单一对话机器人向协作式多智能体AI系统转型,开发者面临着通信开销、上下文漂移和高推理成本等日益严峻的挑战。Nemotron 3系列模型正是为解决这些问题而生,为开发者提供了构建大规模智能体系统所需的透明度与效率。

NVIDIA创始人兼首席执行官黄仁勋表示:"开放创新是AI进步的基础。通过Nemotron,我们将先进AI转化成开放平台,为开发者提供构建大规模代理式系统所需的透明度与效率。"本文将从技术架构、部署方式到实际应用,全面介绍Nemotron 3系列模型的使用方法。

目前相关镜像已经存入Nemotron3自动生成项目中了,可以直接使用,目前吞吐量还是非常不错的,需要一张A100显卡。

1. Nemotron 3 系列概述

Nemotron 3系列是NVIDIA推出的开放模型家族,包含开放权重、训练数据和训练配方,旨在为构建专业化AI智能体提供领先的效率和准确性。该系列采用混合专家模型(Mixture-of-Experts, MoE)架构,包含三种不同规模的版本

模型版本 总参数量 激活参数量 适用场景 发布状态
Nemotron 3 Nano 300亿 30亿/token 高效任务、边缘部署 已发布
Nemotron 3 Super ~1000亿 100亿/token 多智能体应用 2026年上半年
Nemotron 3 Ultra ~5000亿 500亿/token 复杂AI应用、深度推理 2026年上半年

Nemotron 3系列模型支持的语言包括:英语、德语、西班牙语、法语、意大利语和日语。模型采用NVIDIA Open Model License许可证,可用于商业用途。

2. 技术架构深度解析

2.1 混合 Mamba-Transformer MoE 架构

Nemotron 3系列模型采用了创新的混合Mamba-Transformer专家混合架构。该架构基于卡内基梅隆大学和普林斯顿大学的研究成果,引入了选择性状态空间模型(Selective State Space Model),使模型在处理长文本信息时能够保持内部状态,同时显著降低计算成本。

以Nemotron 3 Nano为例,其架构组成如下:

  • 总层数:52层
  • Mamba-2层:23层,负责高效的序列建模
  • Attention层:6层(GQA,2 groups),处理需要全局注意力的任务
  • MoE层:每层包含128个路由专家 + 2个共享专家
  • 激活专家数:每个token激活Top-6专家(通过MLP Router路由)
  • 总参数量:31.6B(约316亿参数)
  • 激活参数量:3.2B(约32亿参数),含Embedding为3.6B
  • 上下文长度:支持最长1M tokens

3. 环境准备与依赖安装

3.1 硬件要求

部署Nemotron 3 Nano模型需要满足以下硬件要求:

精度版本 最低显存要求 推荐GPU
FP8 40GB+ NVIDIA A100/H100
BF16 80GB+ NVIDIA A100 80GB/H100

3.2 软件环境准备

首先,创建并激活Python虚拟环境:

bash 复制代码
# 创建虚拟环境
python -m venv nemotron_env

# Linux/macOS 激活环境
source nemotron_env/bin/activate

安装基础依赖:

bash 复制代码
# 升级pip
pip install --upgrade pip

# 安装PyTorch(根据CUDA版本选择)
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# 安装transformers和相关库
pip install transformers accelerate sentencepiece

3.3 安装推理框架

根据部署需求,选择安装相应的推理框架:

bash 复制代码
# 安装 vLLM(推荐用于高吞吐量场景)
pip install vllm -i https://mirrors.aliyun.com/pypi/simple

# 安装 SGLang
pip install sglang -i https://mirrors.aliyun.com/pypi/simple

4. 模型下载与部署

4.1 从 ModelScope 下载模型(推荐国内用户)

使用 ModelScope 下载模型,国内访问速度更快:

bash 复制代码
# 安装 modelscope
pip install modelscope -i https://mirrors.aliyun.com/pypi/simple

使用 CLI 下载:

bash 复制代码
# 下载 FP8 版本模型到指定目录
modelscope download --model nv-community/NVIDIA-Nemotron-3-Nano-30B-A3B-FP16 \
    --local_dir ./nemotron-nano-fp16

使用 Python 代码下载:

python 复制代码
from modelscope import snapshot_download

# 设置下载路径
model_dir = "./nemotron-nano-fp16"

# 下载模型
model_path = snapshot_download(
    model_id="nv-community/NVIDIA-Nemotron-3-Nano-30B-A3B-F16",
    local_dir=model_dir
)

print(f"模型已下载到: {model_path}")

4.2 从 Hugging Face 下载模型

使用Hugging Face CLI下载模型:

bash 复制代码
# 安装 huggingface_hub
pip install huggingface_hub -i https://mirrors.aliyun.com/pypi/simple

# 登录 Hugging Face(需要账号)
huggingface-cli login

# 下载 FP16 版本模型
huggingface-cli download nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP16 \
    --local-dir ./nemotron-nano-fp16

# 下载 BF16 版本模型
huggingface-cli download nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B \
    --local-dir ./nemotron-nano-bf16

也可以使用Python代码下载:

python 复制代码
from huggingface_hub import snapshot_download

# 下载模型
model_path = snapshot_download(
    repo_id="nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B-FP16",
    local_dir="./nemotron-nano-fp16",
    local_dir_use_symlinks=False
)

print(f"模型已下载到: {model_path}")

4.3 模型文件结构

下载完成后,模型目录结构如下:

复制代码
nemotron-nano-fp16/
├── config.json              # 模型配置文件
├── tokenizer.json           # 分词器配置
├── tokenizer_config.json    # 分词器详细配置
├── special_tokens_map.json  # 特殊token映射
├── model-00001-of-00004.safetensors  # 模型权重文件
├── model-00002-of-00004.safetensors
├── model-00003-of-00004.safetensors
├── model-00004-of-00004.safetensors
├── model.safetensors.index.json      # 权重索引文件
└── README.md                # 模型说明文档

5. vLLM 服务部署

5.1 启动 vLLM 服务

vLLM 提供了高性能的推理服务,支持 OpenAI 兼容的 API 接口。以下是启动服务的几种方式:

基础启动命令(使用本地模型路径):

bash 复制代码
# 启动 FP16 版本模型服务(使用本地下载的模型)
python -m vllm.entrypoints.openai.api_server \
    --model ./nemotron-nano-fp16 \
    --host 0.0.0.0 \
    --port 8000 \
    --tensor-parallel-size 1 \
    --trust-remote-code

生产环境推荐配置:

bash 复制代码
python -m vllm.entrypoints.openai.api_server \
    --model ./nemotron-nano-fp16 \
    --host 0.0.0.0 \
    --port 8000 \
    --tensor-parallel-size 1 \
    --max-model-len 8192 \
    --gpu-memory-utilization 0.9 \
    --enable-chunked-prefill \
    --max-num-seqs 64 \
    --trust-remote-code

主要参数说明:

参数 说明 推荐值
--tensor-parallel-size 张量并行GPU数量 根据GPU数量设置
--max-model-len 最大上下文长度 8192-32768
--gpu-memory-utilization GPU显存使用率 0.85-0.95
--max-num-seqs 最大并发请求数 32-128
--enable-chunked-prefill 启用分块预填充 提升吞吐量

5.2 验证服务状态

启动服务后,可以通过以下方式验证:

bash 复制代码
# 检查服务健康状态
curl http://0.0.0.0:8000/health

# 查看可用模型
curl http://0.0.0.0:8000/v1/models

# 测试对话接口
curl http://0.0.0.0:8000/v1/chat/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "./nemotron-nano-fp16",
        "messages": [{"role": "user", "content": "你好,请介绍一下自己"}],
        "temperature": 0.7,
        "max_tokens": 256
    }'

6. Gradio 网页界面部署

6.1 安装 Gradio

bash 复制代码
pip install gradio openai -i https://mirrors.aliyun.com/pypi/simple

6.2 创建聊天界面

以下是一个完整的 Gradio 聊天界面示例,连接到 vLLM 服务(兼容 Gradio 5.x/6.x):

python 复制代码
import gradio as gr
from openai import OpenAI

# 连接到本地 vLLM 服务
client = OpenAI(
    base_url="http://localhost:8000/v1",
    api_key="not-needed"
)

MODEL_NAME = "./nemotron-nano-fp16"

def get_response(message, history, system_prompt, temperature, max_tokens):
    """调用 vLLM 获取回复"""
    messages = []

    if system_prompt:
        messages.append({"role": "system", "content": system_prompt})

    # 处理历史记录(兼容 messages 格式)
    for msg in history:
        messages.append({"role": msg["role"], "content": msg["content"]})

    messages.append({"role": "user", "content": message})

    try:
        response = client.chat.completions.create(
            model=MODEL_NAME,
            messages=messages,
            temperature=temperature,
            max_tokens=max_tokens,
            stream=True
        )

        partial_message = ""
        for chunk in response:
            if chunk.choices[0].delta.content:
                partial_message += chunk.choices[0].delta.content
                yield partial_message

    except Exception as e:
        yield f"错误: {str(e)}"

# 创建 Gradio 界面
with gr.Blocks() as demo:
    gr.Markdown("# Nemotron 3 Nano 对话助手")

    with gr.Row():
        with gr.Column(scale=3):
            chatbot = gr.Chatbot(height=500)
            msg = gr.Textbox(placeholder="输入您的问题...", show_label=False)

            with gr.Row():
                submit_btn = gr.Button("发送", variant="primary")
                clear_btn = gr.Button("清空对话")

        with gr.Column(scale=1):
            gr.Markdown("### 参数设置")
            system_prompt = gr.Textbox(
                label="系统提示词",
                value="你是一个专业、友好的AI助手。",
                lines=3
            )
            temperature = gr.Slider(
                label="Temperature", minimum=0.0, maximum=1.0, value=0.7, step=0.1
            )
            max_tokens = gr.Slider(
                label="最大输出长度", minimum=64, maximum=4096, value=1024, step=64
            )

    def add_user_message(message, history):
        """添加用户消息"""
        if not message.strip():
            return "", history
        history = history + [{"role": "user", "content": message}]
        return "", history

    def generate_response(history, system_prompt, temperature, max_tokens):
        """生成助手回复"""
        if not history:
            yield history
            return

        user_message = history[-1]["content"]
        history = history + [{"role": "assistant", "content": ""}]

        for partial in get_response(user_message, history[:-2], system_prompt, temperature, max_tokens):
            history[-1]["content"] = partial
            yield history

    # 绑定事件
    msg.submit(add_user_message, [msg, chatbot], [msg, chatbot], queue=False).then(
        generate_response, [chatbot, system_prompt, temperature, max_tokens], chatbot
    )
    submit_btn.click(add_user_message, [msg, chatbot], [msg, chatbot], queue=False).then(
        generate_response, [chatbot, system_prompt, temperature, max_tokens], chatbot
    )
    clear_btn.click(lambda: [], None, chatbot, queue=False)

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860)

注意:如果上述代码报 messages 格式错误,请先运行以下命令检查 Gradio 版本:

bash 复制代码
python -c "import gradio; print(gradio.__version__)"

如果版本低于 5.0,请升级或使用以下旧版兼容代码:

python 复制代码
import gradio as gr
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
MODEL_NAME = "./nemotron-nano-fp16"

def chat(message, history, system_prompt, temperature, max_tokens):
    messages = []
    if system_prompt:
        messages.append({"role": "system", "content": system_prompt})

    # 旧版 Gradio 使用元组格式 [[user, bot], ...]
    for user_msg, bot_msg in history:
        messages.append({"role": "user", "content": user_msg})
        if bot_msg:
            messages.append({"role": "assistant", "content": bot_msg})

    messages.append({"role": "user", "content": message})

    response = client.chat.completions.create(
        model=MODEL_NAME,
        messages=messages,
        temperature=temperature,
        max_tokens=max_tokens,
        stream=True
    )

    partial = ""
    for chunk in response:
        if chunk.choices[0].delta.content:
            partial += chunk.choices[0].delta.content
            yield partial

with gr.Blocks() as demo:
    gr.Markdown("# Nemotron 3 Nano 对话助手")

    with gr.Row():
        with gr.Column(scale=3):
            chatbot = gr.Chatbot(height=500, type="tuples")
            msg = gr.Textbox(placeholder="输入您的问题...", show_label=False)
            with gr.Row():
                submit_btn = gr.Button("发送", variant="primary")
                clear_btn = gr.Button("清空")

        with gr.Column(scale=1):
            system_prompt = gr.Textbox(label="系统提示词", value="你是一个专业的AI助手。", lines=3)
            temperature = gr.Slider(label="Temperature", minimum=0.0, maximum=1.0, value=0.7, step=0.1)
            max_tokens = gr.Slider(label="最大长度", minimum=64, maximum=4096, value=1024, step=64)

    def user(message, history):
        return "", history + [[message, None]]

    def bot(history, system_prompt, temperature, max_tokens):
        message = history[-1][0]
        history[-1][1] = ""
        for chunk in chat(message, history[:-1], system_prompt, temperature, max_tokens):
            history[-1][1] = chunk
            yield history

    msg.submit(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, [chatbot, system_prompt, temperature, max_tokens], chatbot
    )
    submit_btn.click(user, [msg, chatbot], [msg, chatbot], queue=False).then(
        bot, [chatbot, system_prompt, temperature, max_tokens], chatbot
    )
    clear_btn.click(lambda: [], None, chatbot)

if __name__ == "__main__":
    demo.launch(server_name="0.0.0.0", server_port=7860)

6.3 运行 Gradio 服务

将上述代码保存为 app.py,然后运行:

bash 复制代码
python app.py

启动成功后,访问 http://localhost:7860 即可使用网页聊天界面。

7. 总结

Nemotron 3系列模型代表了NVIDIA在开源大语言模型领域的重要布局。通过创新的混合Mamba-Transformer MoE架构,该系列模型在保持高性能的同时,显著降低了推理成本。目前已发布的Nemotron 3 Nano模型已经可以通过Hugging Face、vLLM、SGLang等多种方式进行部署和使用。

随着Nemotron 3 Super和Ultra版本在2026年的发布,开发者将拥有更多选择来构建从边缘到云端的完整AI解决方案。


8. 参考资源

相关推荐
信创天地17 分钟前
核心系统去 “O” 攻坚:信创数据库迁移的双轨运行与数据一致性保障方案
java·大数据·数据库·金融·架构·政务
李少兄41 分钟前
B/S 架构:现代 Web 应用的核心架构模式
前端·架构·b/s
fiveym1 小时前
持续交付与持续部署(CD)深度解析:定义差异、流程架构与交付模式对比
运维·ci/cd·架构
一条咸鱼_SaltyFish2 小时前
Spring Cloud Gateway鉴权空指针惊魂:HandlerMethod为null的深度排查
java·开发语言·人工智能·微服务·云原生·架构
无心水3 小时前
【分布式利器:腾讯TSF】10、TSF故障排查与架构评审实战:Java架构师从救火到防火的生产哲学
java·人工智能·分布式·架构·限流·分布式利器·腾讯tsf
ITFLY811 小时前
架构很简单:系统拆分与组合
架构
踏浪无痕13 小时前
AI 时代架构师如何有效成长?
人工智能·后端·架构
anyup14 小时前
2026第一站:分享我在高德大赛现场学到的技术、产品与心得
前端·架构·harmonyos
桌面运维家15 小时前
vDisk配置漂移怎么办?VOI/IDV架构故障快速修复
网络·架构
刘立军16 小时前
如何选择FAISS的索引类型
人工智能·算法·架构