Granite 4.0 Nano语言模型:轻量级AI的强大能力与实用指南

什么是Granite 4.0 Nano语言模型?

如果你正在寻找一款既能在资源有限的设备上高效运行,又能支持多种复杂任务的AI模型,那么Granite 4.0 Nano语言模型或许正是你需要的。它是IBM推出的轻量级、最先进的开源基础模型,专为效率和速度至关重要的场景设计。

与那些需要庞大计算资源的大型模型不同,Granite 4.0 Nano可以在智能手机、物联网设备等资源受限的硬件上运行。这意味着它能支持离线应用,更好地保护用户隐私——毕竟数据不需要上传到云端处理。

这些模型的应用范围相当广泛,包括代码补全(通过专门的前缀和后缀标记实现“中间填充”功能)、检索增强生成(RAG)、工具调用以及结构化JSON输出等。无论你是开发者想集成到应用中,还是企业寻找适合特定场景的AI解决方案,它都有很大的实用价值。

更重要的是,所有Granite 4.0 Nano模型都基于Apache 2.0许可证公开发布,这意味着你可以免费将其用于研究和商业目的。在数据处理和训练过程中,IBM还融入了企业场景特有的治理、风险和合规(GRC)评估,以及标准的数据清理和文档质量审查流程,让模型更适合企业级应用和定制化需求。

Granite 4.0 Nano有哪些型号可选?

Granite 4.0 Nano模型家族提供了多种型号,以满足不同场景的需求。按参数规模分,有350M和1B两种;按架构分,有纯密集型(dense)和密集-混合型(dense-hybrid);按训练阶段分,有基础模型(预训练后的 checkpoint)和指令模型(针对对话、指令遵循、实用性和安全性进行微调的checkpoint)。

具体型号如下:

  1. ibm-granite/granite-4.0-1b-base(1B参数基础模型,纯密集架构)
  2. ibm-granite/granite-4.0-1b(1B参数指令模型,纯密集架构)
  3. ibm-granite/granite-4.0-h-1b-base(1B参数基础模型,密集-混合架构)
  4. ibm-granite/granite-4.0-h-1b(1B参数指令模型,密集-混合架构)
  5. ibm-granite/granite-4.0-350m-base(350M参数基础模型,纯密集架构)
  6. ibm-granite/granite-4.0-350m(350M参数指令模型,纯密集架构)
  7. ibm-granite/granite-4.0-h-350m-base(350M参数基础模型,密集-混合架构)
  8. ibm-granite/granite-4.0-h-350m(350M参数指令模型,密集-混合架构)

其中,带有“h”的型号采用了混合架构,结合了Transformer和SSM(状态空间模型)的优势,在效率和性能之间取得了更好的平衡;而不带“h”的型号则采用传统Transformer架构,适合那些对混合架构支持尚未优化的工作负载(如Llama.cpp环境)。

Granite 4.0 Nano能做什么?核心能力详解

Granite 4.0 Nano虽然体型小巧,但能力却十分全面。无论是基础的问答交互,还是复杂的工具调用、代码补全,它都能应对自如。下面我们逐一介绍它的核心能力及使用方法。

1. 基础推理:简单对话与问答

最基础的用法是让模型处理用户的提问,进行对话或回答问题。比如询问常识性问题、解释概念等。

如何操作?
只需几步即可实现:

  • 安装必要的库(torch、transformers等)
  • 加载模型和分词器
  • 构造对话内容
  • 生成并输出结果

以下是一个使用Granite-4.0-350M模型进行基础推理的示例代码:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

# 选择设备,"auto"会自动选择可用设备(GPU优先)
device = "auto"
# 模型路径,可替换为其他型号
model_path = "ibm-granite/granite-4.0-350m"
# 加载分词器
tokenizer = AutoTokenizer.from_pretrained(model_path)
# 加载模型,若使用CPU可去掉device_map参数
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)
model.eval()

# 构造对话内容
chat = [
    { "role": "user", "content": "What is the name of the durable rock known for being one of the hardest natural building stones?"},
]

# 应用对话模板,准备输入
chat = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)

#  tokenize输入文本
input_tokens = tokenizer(chat, return_tensors="pt").to(device)
# 生成输出
output = model.generate(**input_tokens, 
                        max_new_tokens=150)
# 解码并打印结果
output = tokenizer.batch_decode(output)
print(output)

这段代码的逻辑很清晰:先准备好对话内容,通过分词器处理成模型能理解的格式,再让模型生成回答,最后将结果解码为自然语言。你可以根据需要修改model_path来使用不同型号的模型,也可以调整max_new_tokens控制生成内容的长度。

2. 工具调用:让AI与外部系统交互

在很多场景中,AI需要调用外部工具(如API、函数)才能完成任务。比如查询天气、验证车辆信息等。Granite 4.0 Nano具备强大的工具调用能力,能根据用户需求选择合适的工具,并处理工具返回的结果。

它能解决什么问题?

  • 当需要实时数据(如天气、股票)时,调用对应的API获取
  • 处理特定领域的任务(如验证VIN码、查询车辆注册信息)
  • 多轮交互中,根据前一步结果决定是否继续调用工具

使用示例:验证车辆VIN码与处理后续请求

下面的代码展示了模型如何调用工具验证VIN码,并在面对无法处理的请求时礼貌回复:

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

device = "cuda"  # 若使用CPU,改为"cpu"并去掉模型加载时的device_map
model_path = "ibm-granite/granite-4.0-350m"
tokenizer = AutoTokenizer.from_pretrained(model_path)
# 加载模型,CPU用户可去掉device_map参数
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)
model.eval()

# 构造对话历史
chat=[
    {"role": "user", "content": "我想买一辆二手卡车用于建筑工作,卖家提供了VIN码:1FMXK92W8YPA12345,说车辆注册在佐治亚州。你能验证这个VIN码是否有效,是否与注册车辆匹配吗?"},
    {"role": "assistant", 
        "content": "", 
        "tool_calls": [
            {
                "function": {
                    "name": "check_valid_vin",
                    "arguments": {"vin": "1FMXK92W8YPA12345"}
                }
            }
        ]
    },
    {"role": "tool",  "content": "{\"valid\": true, \"vin_details\": {\"make\": \"Ford\", \"model\": \"F-150\", \"year\": 2020, \"vehicle_type\": \"Truck\", \"registration_status\": \"Active\", \"registration_state\": \"GA\", \"odometer\": 82345, \"title_status\": \"Clear\", \"lienholder\": null, \"recall_history\": \"No active recalls\"}, \"notes\": \"VIN有效且在佐治亚州注册。PPSR留置权检查完成——未发现担保权益。车牌验证需要单独的DMV查询,目前此工具不支持。\"}"},
    {"role": "user", "content": "我还在考虑从德克萨斯州的官方经销商处购买一辆新的福特F-150。你能提供这种卡车在该州的成本估算吗?"},  
]

# 定义可用工具列表(遵循OpenAI函数定义格式)
tools = [
  {
    "type": "function",
    "function": {
      "name": "check_valid_registration",
      "description": "验证车辆注册号在特定州是否有效,并返回注册车辆的详细信息(若有效)。用于验证车辆注册状态及获取所有权/车辆数据。",
      "parameters": {
        "type": "object",
        "properties": {
          "reg": {
            "type": "string",
            "description": "标准格式的车辆注册号(如ABC123或XYZ-7890)"
          },
          "state": {
            "type": "string",
            "description": "车辆注册所在州的两字母缩写(如加利福尼亚州为CA,得克萨斯州为TX)"
          }
        },
        "required": ["reg", "state"],
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "check_valid_vin",
      "description": "验证车辆识别号(VIN)是否与官方记录中的注册车辆对应。若有效,返回包括品牌、型号、年份、注册状态和所有权信息在内的综合车辆详情。",
      "parameters": {
        "type": "object",
        "properties": {
          "vin": {
            "type": "string",
            "description": "17位车辆识别号,需遵循标准VIN格式(大写字母数字,无空格或特殊字符)。内部会进行大小写不敏感验证。"
          }
        },
        "required": ["vin"],
      }
    }
  },
  {
    "type": "function",
    "function": {
      "name": "ppsr_lookup_by_vin",
      "description": "通过VIN对车辆进行PPSR(个人财产安全登记)查询。返回包括担保权益、所有权状态和官方PDF证书URL的搜索结果。用于验证车辆历史或担保声明。",
      "parameters": {
        "type": "object",
        "properties": {
          "vin": {
            "type": "string",
            "description": "17位字母数字车辆识别号(符合ISO 3779标准),大小写不敏感。例如:'1HGCM82633A123456'"
          }
        },
        "required": ["vin"]
      }
    }
  },
]
    
# 应用对话模板,传入工具信息
chat = tokenizer.apply_chat_template(chat,tokenize=False, add_generation_prompt=True, tools=tools)

# 处理输入并生成输出
input_tokens = tokenizer(chat, return_tensors="pt").to(device)
output = model.generate(** input_tokens, 
                        max_new_tokens=1000)
output = tokenizer.batch_decode(output)
print(output[0])

在这个例子中,模型首先接收到验证VIN码的请求,由于check_valid_vin工具可用,它会生成对应的工具调用;当工具返回结果后,用户又询问新卡车的成本估算,但可用工具中没有相关功能,模型会生成道歉信息说明无法提供帮助。

3. 结构化JSON输出:规范数据格式

在处理需要结构化数据的场景(如解析表单、生成标准化报告)时,Granite 4.0 Nano能精确按照指定的JSON schema生成输出,避免格式混乱带来的后续处理问题。

适用场景:

  • 解析IT支持工单,提取关键信息(如请求人、优先级、问题类别)
  • 将非结构化文本转换为数据库可直接存储的格式
  • 生成符合API要求的请求参数

使用示例:解析IT支持工单为JSON格式

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

device = "cuda"  # CPU用户改为"cpu"
model_path = "ibm-granite/granite-4.0-350m" 

tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)  # CPU用户去掉device_map
model.eval()

# 构造对话,系统提示定义JSON格式要求
chat = [
  {
    "role": "system",
    "content": "你是一个乐于助人的助手,仅以JSON格式回答。以下是你必须遵循的JSON schema:\n<schema>\n{\"title\":\"ITSupportTicket\",\"type\":\"object\",\"properties\":{\"ticketID\":{\"type\":\"string\"},\"requester\":{\"type\":\"object\",\"properties\":{\"name\":{\"type\":\"string\"},\"email\":{\"type\":\"string\",\"format\":\"email\"}},\"required\":[\"name\",\"email\"]},\"category\":{\"type\":\"string\",\"enum\":[\"Access\",\"Hardware\",\"Software\",\"Network\",\"Other\"]},\"priority\":{\"type\":\"string\",\"enum\":[\"Low\",\"Medium\",\"High\",\"Critical\"]},\"description\":{\"type\":\"string\"},\"reportedAt\":{\"type\":\"string\",\"format\":\"date-time\"}},\"required\":[\"ticketID\",\"requester\",\"category\",\"priority\",\"description\",\"reportedAt\"]}\n</schema>\n"
  },
  {
    "role": "user",
    "content": "请帮我分解以下IT工单内容并进行分类。\n# 工单内容:\n我在家无法访问VPN——认证后一直超时。请标记为高优先级。我是Jordan Lee,邮箱是jordan.lee@acme.co。工单编号设为TCK-10944。我今天大约在2025-10-01T08:35:00Z发现了这个问题。"
  }
]

# 应用对话模板
chat = tokenizer.apply_chat_template(chat,tokenize=False, add_generation_prompt=True)

# 生成并输出结果
input_tokens = tokenizer(chat, return_tensors="pt").to(device)
output = model.generate(**input_tokens, 
                        max_new_tokens=200)
output = tokenizer.batch_decode(output)
print(output[0])

运行这段代码后,模型会严格按照系统提示中定义的schema,从用户提供的工单内容中提取信息,生成结构完整的JSON,包含工单ID、请求人信息、问题类别(这里会被归类为“Network”)、优先级(“High”)等关键字段。

4. 代码补全(FIM):填充中间缺失代码

对于开发者来说,“中间填充”(Fill-in-the-Middle,FIM)功能非常实用——它能在已有代码的前缀和后缀之间,智能生成缺失的部分,提高编程效率。

使用场景:

  • 补全函数内部的逻辑实现
  • 填充循环或条件判断中的代码
  • 完善未完成的算法步骤

使用示例:补全用户数据汇总函数

import torch
from transformers import AutoModelForCausalLM, AutoTokenizer

device = "cuda"  # CPU用户改为"cpu"
model_path = "ibm-granite/granite-4.0-350m"
tokenizer = AutoTokenizer.from_pretrained(model_path)

model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)  # CPU用户去掉device_map
model.eval()

# 构造包含前缀、后缀的提示,中间部分需要模型补全
prompt = """<|fim_prefix|>
def summarize_users(users):
    \"\"\"
    给定一个包含'name'和'age'的用户字典列表,
    返回包含平均年龄和姓名列表的汇总信息。
    \"\"\"
    summary = {}
<|fim_suffix|>
    return summary
<|fim_middle|>
"""

# 构造对话
chat = [
    { "role": "user", "content": prompt},
]

# 处理输入并生成代码
chat = tokenizer.apply_chat_template(chat, tokenize=False, add_generation_prompt=True)
input_tokens = tokenizer(chat, return_tensors="pt").to(device)
output = model.generate(** input_tokens, 
                        max_new_tokens=100)
output = tokenizer.batch_decode(output)
print(output[0])

在这个例子中,summarize_users函数的开头(前缀)和结尾(后缀)已经给出,模型需要在中间填充计算平均年龄和收集姓名的逻辑。生成的代码会自动完成这部分工作,让函数能够正常运行。

Granite 4.0 Nano的性能如何?评估结果解析

选择模型时,性能是重要的考量因素。Granite 4.0 Nano在多个基准测试中表现出色,尤其考虑到它的参数规模,其性能优势更为明显。

各型号性能对比

不同型号的Granite 4.0 Nano在各类任务中的表现如下表所示(数据来源于模型官方评估):

基准测试 评估指标 350M 纯密集 H 350M 密集混合 1B 纯密集 H 1B 密集混合
通用任务
MMLU 5-shot 35.01 36.21 59.39 59.74
MMLU-Pro 5-shot, CoT 12.13 14.38 34.02 32.86
BBH 3-shot, CoT 33.07 33.28 60.37 59.68
AGI EVAL 0-shot, CoT 26.22 29.61 49.22 52.44
GPQA 0-shot, CoT 24.11 26.12 29.91 29.69
对齐任务
IFEval Instruct, Strict 61.63 67.63 80.82 82.37
IFEval Prompt, Strict 49.17 55.64 73.94 74.68
IFEval Average 55.4 61.63 77.38 78.53
数学任务
GSM8K 8-shot 30.71 39.27 76.35 69.83
GSM Symbolic 8-shot 26.76 33.7 72.3 65.72
Minerva Math 0-shot, CoT 13.04 5.76 45.28 49.4
DeepMind Math 0-shot, CoT 8.45 6.2 34 34.98
代码任务
HumanEval pass@1 39 38 74 73
HumanEval+ pass@1 37 35 69 68
MBPP pass@1 48 49 65 69
MBPP+ pass@1 38 44 57 60
CRUXEval-O pass@1 23.75 25.5 33.13 36
BigCodeBench pass@1 11.14 11.23 30.18 29.12
工具调用任务
BFCL v3 39.32 43.32 54.82 50.21
多语言任务
MULTIPLE pass@1 15.99 14.31 32.24 36.11
MMMLU 5-shot 28.23 27.95 45 49.43
INCLUDE 5-shot 27.74 27.09 42.12 43.35
MGSM 8-shot 14.72 16.16 37.84 27.52
安全性
SALAD-Bench 97.12 96.55 93.44 96.4
AttaQ 82.53 81.76 85.26 82.85

数据解读

从表格中可以看出:

  • 1B参数型号在几乎所有任务上的表现都优于350M型号,这符合模型参数规模与性能的一般关系
  • 混合架构(H系列)在部分任务(如对齐任务、多语言任务)上表现更优,体现了其架构设计的优势
  • 在代码任务(如HumanEval、MBPP)中,1B型号的pass@1指标达到65-74,说明其代码生成能力较强
  • 安全性相关的基准测试中,各型号得分均在80以上,表明模型在安全方面有较好的表现

此外,与同参数规模的其他模型相比,Granite 4.0 Nano在综合能力上有明显优势。在知识、数学、代码和安全等领域的平均准确率,以及指令遵循(IFEval)、工具调用(BFCLv3)等关键任务上,都处于领先水平。

Granite 4.0 Nano与同类模型综合性能对比
Granite 4.0 Nano在IFEval和BFCLv3上的表现

如何下载和安装Granite 4.0 Nano模型?

如果你想亲自体验Granite 4.0 Nano,下载和安装过程非常简单。

下载模型

你可以通过Git直接克隆模型仓库。以ibm-granite/granite-4.0-350m为例,在终端中运行以下命令:

git clone https://huggingface.co/ibm-granite/granite-4.0-350m

如果你需要其他型号,只需将命令中的模型路径替换为对应的型号名称(如ibm-granite/granite-4.0-h-1b)。

安装依赖库

使用模型前,需要安装必要的Python库。推荐使用以下命令:

pip install torch torchvision torchaudio
pip install accelerate
pip install transformers
  • torch:PyTorch深度学习框架,模型运行的基础
  • accelerate:用于加速模型训练和推理的工具
  • transformers:Hugging Face的库,提供模型加载和使用的接口

安装完成后,就可以按照前面介绍的示例代码使用模型了。

常见问题解答(FAQ)

1. Granite 4.0 Nano支持哪些语言?

目前支持英语、德语、西班牙语、法语、日语、葡萄牙语、阿拉伯语、捷克语、意大利语、韩语、荷兰语和中文。如果你需要其他语言,可以通过微调模型来扩展其支持范围。

2. 这些模型可以用于商业项目吗?

可以。所有Granite 4.0 Nano模型都基于Apache 2.0许可证发布,允许免费用于研究和商业目的。

3. 运行模型需要什么硬件配置?

由于模型体型小巧,350M参数型号可以在普通CPU上运行,也能在中低端GPU(如NVIDIA GTX系列)上高效运行;1B参数型号建议使用具有一定显存的GPU(如NVIDIA RTX系列)以获得更好的性能。对于资源受限的设备(如智能手机),可以通过优化部署(如量化)进一步降低资源需求。

4. 如何选择合适的型号?

  • 若优先考虑资源占用,选择350M参数型号
  • 若需要更好的性能,选择1B参数型号
  • 若使用环境对混合架构有优化支持,优先选择H系列(密集-混合架构)
  • 若需要兼容Llama.cpp等对传统Transformer更友好的框架,选择非H系列(纯密集架构)

5. 可以对模型进行微调以适应特定任务吗?

可以。Granite 4.0 Nano的紧凑尺寸使其非常适合在特定领域进行微调,且不需要大规模的计算资源。你可以使用自己的数据集对模型进行微调,以提升其在特定任务上的表现。

6. 如何获取模型的详细评估报告?

各型号的核心评估结果可以在其对应的Hugging Face模型卡片中找到,更全面的扩展评估报告可参考官方文档。你也可以访问Granite 4.0 Nano的Hugging Face集合获取更多信息。

7. 遇到问题或有反馈该如何处理?

你可以通过两种方式提供反馈或提问:

  • 访问模型的Hugging Face仓库,进入“Community”标签,点击“New discussion”
  • GitHub讨论页面发布问题或评论

总结

Granite 4.0 Nano语言模型家族以其轻量级、高性能的特点,为资源受限设备上的AI应用提供了理想选择。无论是基础的问答交互、复杂的工具调用,还是结构化数据生成、代码补全,它都能胜任。

凭借Apache 2.0许可证的灵活性,以及对多语言、多任务的支持,这些模型在研究和商业场景中都有广泛的应用前景。如果你正在寻找一款易于部署、功能全面且成本可控的AI模型,Granite 4.0 Nano值得一试。

如果你想深入了解或开始使用,可以访问Hugging Face集合官方文档获取更多资源。

引用说明

如果你在研究或项目中使用了Granite 4.0 Nano模型,请按以下格式引用:

@misc{granite2025,
  author       = {{IBM Research}},
  title        = {Granite 4.0 Nano Language Models},
  year         = {2025},
  howpublished = {\url{https://github.com/ibm-granite/granite-4.0-nano-language-models}},
  note         = {Accessed: 2025-10-23}
}