Generative AI for Beginners 第 19 课:小语言模型(SLM)与 Microsoft Phi-3/3.5 家族推理实战指南
【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners
本指南基于generative-ai-for-beginners课程第 19 课(translations/it/19-slm/README.md)展开,系统讲解小语言模型(Small Language Model, SLM)的核心概念、与大型语言模型(LLM)的差异,以及以 Microsoft Phi-3/3.5 家族为代表的 SLM 在文本、视觉、MoE 三大场景下的完整推理方案。读完本文,你将掌握 SLM 的基本原理与选型思路,并能够通过云 API(Foundry Models / Azure AI Studio / NVIDIA NIM)与本地运行时(Hugging Face Transformers / Ollama / Foundry Local / ONNX Runtime for GenAI)亲手完成 Phi-3/3.5 系列的推理调用。
什么是小语言模型(SLM)?
生成式 AI 是人工智能领域中专注于创建新内容的分支,其产物可以涵盖文本、图像、音乐乃至完整的虚拟环境,而语言模型正是其中最激动人心的应用方向之一。小语言模型(SLM)是大型语言模型(LLM)的缩小变体:它继承了 LLM 的大部分架构原理与技术手段,但计算足迹(computational footprint)显著降低。
SLM 是一类专为生成类人文本而设计的语言模型子集。与 GPT-4 这类庞然大物相比,SLM 更加紧凑高效,特别适合计算资源受限的应用场景。尽管体量更小,SLM 依然能胜任多种自然语言处理(NLP)任务:
- 文本生成:生成连贯且上下文相关的句子或段落;
- 文本补全:基于给定提示预测并补全句子;
- 翻译:将文本从一种语言转换为另一种语言;
- 摘要:将长文本压缩为更短、更易消化的摘要。
通常,SLM 通过压缩或蒸馏(distill)LLM 构建,目标是保留原模型绝大部分的功能与语言能力。模型规模的缩减降低了整体复杂度,使 SLM 在内存占用与算力需求上更加高效——当然,相比更大的模型,SLM 在性能或理解深度上会做出一定取舍。
SLM 是如何工作的?
SLM 在海量文本数据上训练而成。训练过程中,模型学习语言的模式与结构,从而生成语法正确、语境恰当的输出。其训练流程主要包括四个环节:
- 数据收集:从多种来源采集大规模文本数据集;
- 预处理:清洗与整理数据,使其适合训练;
- 训练:使用机器学习算法教会模型理解并生成文本;
- 微调(Fine-tuning):针对特定任务调整模型,以提升其专项表现。
SLM 的发展与"在资源受限环境中部署模型"的需求高度契合——例如移动设备与边缘计算平台,在这些场景下全尺寸 LLM 因资源需求过高而难以落地。通过聚焦效率,SLM 在性能与可访问性之间取得平衡,从而在更多领域获得广泛应用。
学习目标
本课的目标是将 SLM 的知识与 Microsoft Phi-3/3.5 家族结合,学习文本内容、视觉与 MoE 三个不同场景。学完本课,你应当能够回答:
- 什么是 SLM?
- SLM 与 LLM 的区别是什么?
- Microsoft Phi-3/3.5 家族包含哪些模型?
- 如何用 Microsoft Phi-3/3.5 家族完成推理?
LLM 与 SLM 的五大核心差异
LLM 与 SLM 都建立在概率机器学习的基础原则上,在架构设计、训练方法、数据生成过程与模型评估技术上有相似之处,但在以下关键维度上存在明显分野。
尺寸(Size)
LLM 与 SLM 的首要区别在于模型规模。像 ChatGPT(GPT-4)这样的 LLM 参数规模估计高达约 1.76 万亿,而 Mistral 7B 这类开源 SLM 的参数仅约 70 亿。这种悬殊主要源于模型架构与训练过程的差异:例如 ChatGPT 在 encoder-decoder 框架内采用 self-attention 机制,而 Mistral 7B 使用滑动窗口注意力(sliding window attention),在仅 decoder 模型内实现更高效的训练。架构差异对模型的复杂度与性能有着深远影响。
理解(Comprehension)
SLM 通常针对特定领域进行优化,高度专精,但在跨知识领域提供广泛语境理解的能力上可能受限。相反,LLM 旨在更全面地模拟类人智能——它们在庞大而多样的数据集上训练,被设计为在多个领域都表现出色,具备更强的通用性与适应性,因此更适合范围更广的下游任务,如自然语言处理与编程。
计算(Computing)
LLM 的训练与部署是资源密集型过程,往往需要大规模 GPU 集群等重型计算基础设施。例如从头训练 ChatGPT 这类模型可能需要数千块 GPU 持续运行较长时间。相比之下,SLM 参数更少,算力门槛更低:像 Mistral 7B 这样的模型可以在配备中等 GPU 的本地机器上训练与运行,尽管训练仍需多块 GPU 数小时。
偏差(Bias)
偏差是 LLM 的已知问题,主要源于训练数据的性质。LLM 常依赖网络上公开的原始数据,可能对某些群体代表性不足或错误表征、引入错误标注,或因方言、地域差异与语法规则而产生语言偏差。此外,LLM 架构的复杂性可能无意中放大偏差,若不仔细微调便难以察觉。而 SLM 训练于更受限、领域特定的数据集,从本质上对这类偏差不那么敏感——当然也并非完全免疫。
推理(Inference)
较小的尺寸赋予 SLM 显著的推理速度优势,使其无需大量并行处理即可在本地硬件上高效生成输出。而 LLM 因体量与复杂度,通常需要大量并行计算资源才能达到可接受的推理时间;在规模化部署场景下,大量并发用户还会进一步拖慢 LLM 的响应速度。
小结:LLM 与 SLM 在模型大小、资源需求、语境理解、偏差敏感度与推理速度上差异显著,这反映了它们各自适配不同的用例——LLM 更通用但资源密集,SLM 以更低算力成本换取领域特定的高效。
注意:本课以 Microsoft Phi-3 / 3.5 家族作为 SLM 的讲解示例。
Microsoft Phi-3 / Phi-3.5 家族概览
Phi-3 / 3.5 家族主要面向文本、视觉与 Agent(MoE)三类应用场景。
Phi-3 / 3.5 Instruct:文本场景
主要面向文本生成、聊天补全与内容信息抽取等任务。
Phi-3-mini:一个 38 亿参数的模型,可在 Microsoft Foundry / Azure AI Studio、Hugging Face 与 Ollama 上获取。Phi-3 系列在关键基准(数值越高越好)上显著超越同等乃至更大尺寸的语言模型:Phi-3-mini 超过两倍于自身规模的模型,Phi-3-small 与 Phi-3-medium 则超过包括 GPT-3.5 在内的更大模型。
Phi-3-small & medium:仅 70 亿参数的 Phi-3-small 在语言、推理、编码与数学等一系列基准上击败 GPT-3.5T;140 亿参数的 Phi-3-medium 延续这一趋势,超过 Gemini 1.0 Pro。
Phi-3.5-mini:可视为 Phi-3-mini 的升级版。参数保持不变,但提升了多语言支持能力(支持 20 多种语言:阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语),并加强了对长上下文的支撑。38 亿参数的 Phi-3.5-mini 超越同尺寸模型,与两倍于自身规模的模型持平。
Phi-3 / 3.5 Vision:视觉场景
可以把 Phi-3/3.5 的 Instruct 模型理解为 Phi 的"理解能力",而 Vision 则是赋予 Phi 一双观察世界的"眼睛"。
Phi-3-Vision:仅 42 亿参数,在通用视觉推理、OCR、表格与图表理解等任务上超越 Claude-3 Haiku 与 Gemini 1.0 Pro V 等更大模型。
Phi-3.5-Vision:是 Phi-3-Vision 的升级版,增加了对多张图像的支持——可以理解为视觉能力的提升,不仅能看图,还能理解视频。Phi-3.5-Vision 在 OCR、表格与图表理解任务上超越 Claude-3.5 Sonnet 与 Gemini 1.5 Flash 等更大模型,在通用视觉知识推理任务上与它们持平;它支持多帧输入,即可同时对多张输入图像进行推理。
Phi-3.5-MoE:Agent 场景
混合专家(Mixture of Experts, MoE)使模型能够以远低于稠密模型的计算量完成预训练,也就是说在相同计算预算下可以大幅扩展模型或数据集规模;特别是在预训练阶段,MoE 模型应该比其稠密对应物更快达到同等质量。
Phi-3.5-MoE 由 16 个各 38 亿参数的专家模块组成(16x3.8B)。仅 66 亿激活参数的 Phi-3.5-MoE 在推理、语言理解与数学方面达到与更大模型相当的水平。
我们可以根据不同的场景选用 Phi-3/3.5 家族模型。与 LLM 不同,你可以将 Phi-3/3.5-mini 或 Phi-3/3.5-Vision 部署到边缘设备上。
如何运行 Phi-3/3.5 家族模型
下面按照"云 API 推理"与"本地运行"两条路径,逐一演示 Phi-3/3.5 在各场景中的使用方法。
通过云 API 推理
Foundry Models / GitHub Models
GitHub Models 是最直接的入口:通过 GitHub Models 可快速访问 Phi-3/3.5-Instruct 模型,结合 Azure AI Inference SDK / OpenAI SDK 即可通过代码完成 API 调用,也可以在 Playground 中直接测试不同效果。
注意:英文原版(19-slm/README.md)已更新提示——GitHub Models 将于 2026 年 7 月底退役,Microsoft Foundry Models 是其直接替代方案。课程第 6 课的完整示例 githubmodels-app.py 展示了标准调用模式:从 Foundry 项目 "Overview" 页面获取凭据,以
ChatCompletionsClient+AzureKeyCredential构造客户端,再通过client.complete(messages=..., model=..., temperature=..., max_tokens=..., top_p=...)完成推理,代码同样适用于 Phi 系列模型。
- 演示:Phi-3-mini 与 Phi-3.5-mini 在中文场景下的效果对比
Azure AI Studio / Foundry
如果要用 Vision 与 MoE 模型,可以改用 Azure AI Studio(Foundry)完成调用。感兴趣的话可以在 Phi-3 Cookbook 中查阅如何通过 Azure AI Studio 调用 Phi-3/3.5 的 Instruct、Vision、MoE 模型。
NVIDIA NIM
除了 Azure 与 GitHub 提供的云模型目录方案,还可以使用NVIDIA NIM完成相关调用。NVIDIA NIM(NVIDIA Inference Microservices)是一组加速推理微服务,帮助开发者跨云、数据中心与工作站等多种环境高效部署 AI 模型。其关键特性包括:
- 易于部署:一条命令即可部署 AI 模型,轻松集成进现有工作流;
- 性能优化:利用 NVIDIA 预优化推理引擎(如 TensorRT 与 TensorRT-LLM)保证低延迟与高吞吐;
- 可扩展:支持 Kubernetes 上的自动扩缩容,有效应对波动的负载;
- 安全可控:组织可自托管 NIM 微服务,在自有受管基础设施上保持对数据与应用的控制;
- 标准 API:提供行业标准 API,便于构建与集成聊天机器人、AI 助手等应用。
NIM 属于 NVIDIA AI Enterprise 的一部分,旨在简化 AI 模型的部署与运维,确保其在 NVIDIA GPU 上高效运行。
仓库中的演示 notebook Phi-3-Vision-Nividia-NIM.ipynb 完整展示了调用 Phi-3.5-Vision API 的流程,核心步骤为:
import requests, base64 invoke_url = "https://ai.api.nvidia.com/v1/vlm/microsoft/phi-3-vision-128k-instruct" # 读取图片并转 base64 with open("./img/demo.png", "rb") as f: image_b64 = base64.b64encode(f.read()).decode() headers = { "Authorization": "Bearer Your Nvidia NIM API Key", "Accept": "application/json" } payload = { "messages": [ { "role": "user", "content": f'Tell me what is in the picture <img src="data:image/png;base64,{image_b64}" />' } ], "max_tokens": 1024, "temperature": 0.6, "top_p": 1.0, "stream": False } response = requests.post(invoke_url, headers=headers, json=payload) print(response.json())该 notebook 还演示了将 base64 图片嵌入用户消息的<img src="data:image/png;base64,..." />语法,并给出对超大图片(base64 长度超过约 18 万字符)改用 assets API 的断言提示。
本地运行 Phi-3/3.5
与 Phi-3 或 GPT-3 等任何语言模型相关的推理(inference),指的是基于输入生成响应或预测的过程:当你向 Phi-3 提供 prompt 或问题时,它利用训练好的神经网络,通过分析训练数据中的模式与关系,推断出最可能且最相关的回答。
Hugging Face Transformers
Hugging Face Transformers 是为 NLP 及其他机器学习任务设计的强大库,关键特点包括:
- 预训练模型:提供数千个预训练模型,可用于文本分类、命名实体识别、问答、摘要、翻译与文本生成等任务;
- 框架互操作:支持 PyTorch、TensorFlow 与 JAX 等多个深度学习框架,可在一种框架中训练、在另一种框架中使用;
- 多模态能力:除 NLP 外,还支持计算机视觉(如图像分类、目标检测)与音频处理(如语音识别、音频分类);
- 易用性:提供 API 与工具,轻松下载与微调模型,初学者与专家皆可上手;
- 社区与资源:拥有活跃的社区及丰富的文档、教程与指南。
这是最常用的方法,但也需要 GPU 加速——毕竟 Vision 与 MoE 等场景计算量大,若不量化,在 CPU 上会非常慢。
仓库为三种场景各提供了一个 Transformers 演示 notebook:
- Instruct:phi35-instruct-demo.ipynb 演示如何调用 Phi-3.5-Instruct。核心流程:用
AutoModelForCausalLM.from_pretrained(..., device_map="cuda", torch_dtype="auto", trust_remote_code=True)加载模型,用AutoTokenizer.from_pretrained加载分词器,再以pipeline("text-generation", model=model, tokenizer=tokenizer)构建管线,并传入 Phi 系列特有的聊天模板:
messages = "<|system|>\n 你是我的人工智能助手,协助我用中文解答问题.\n<|end|><|user|>\n 你知道长沙吗? \n<|end|><|assistant|>" generation_args = { "max_new_tokens": 1024, "return_full_text": False, "temperature": 0.3, "do_sample": False, } output = pipe(messages, **generation_args) print(output[0]['generated_text'])- Vision:phi35-vision-demo.ipynb 演示多帧视频理解:先用 OpenCV 从视频中抽取关键帧(直方图相关性低于阈值的帧),构造
<|image_1|>...<|image_n|>占位符,再用AutoProcessor.from_pretrained(model_id, trust_remote_code=True, num_crops=4)处理图文输入,以flash_attention_2注意力实现加载模型:
from transformers import AutoModelForCausalLM, AutoProcessor model = AutoModelForCausalLM.from_pretrained( model_id, device_map="cuda", trust_remote_code=True, torch_dtype="auto", _attn_implementation='flash_attention_2' ) processor = AutoProcessor.from_pretrained(model_id, trust_remote_code=True, num_crops=4) prompt = processor.tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) inputs = processor(prompt, images, return_tensors="pt").to("cuda:0") generate_ids = model.generate(**inputs, eos_token_id=processor.tokenizer.eos_token_id, max_new_tokens=1000, temperature=0.0, do_sample=False) response = processor.batch_decode(generate_ids[:, inputs['input_ids'].shape[1]:], skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]- MoE:phi35_moe_demo.ipynb 演示调用 Phi-3.5-MoE 构建工具调用式 Agent。加载的模型结构(
PhiMoEForCausalLM)清晰展示了 MoE 架构的实现:32 层PhiMoEDecoderLayer,每层含一个block_sparse_moe稀疏专家模块,其中 gate 层(Linear(4096, 16))负责路由,16 个PhiMoEBlockSparseTop2MLP专家各含 w1/w2/w3 三个线性层与 SiLU 激活。演示通过系统提示让模型以 JSON 格式输出tool_name/input字段完成 Blog、Translate 等工具的规划与调用:
import transformers from torch import bfloat16 model = transformers.AutoModelForCausalLM.from_pretrained( "../Phi3MOE", trust_remote_code=True, torch_dtype=bfloat16, device_map='auto' ) tokenizer = transformers.AutoTokenizer.from_pretrained("../Phi3MOE") def instruction_format(sys_message: str, query: str): # 注意:不要在末尾附加 "</s>" return f'<|system|> {sys_message} <|end|>\n<|user|> {query} <|end|>\n<|assistant|>' output = pipe(input_prompt, **{"max_new_tokens": 512, "return_full_text": False, "temperature": 0.3, "do_sample": False})Ollama
Ollama 是一个让 LLM 在本地机器上更容易运行的平台,支持 Llama 3.1、Phi 3、Mistral、Gemma 2 等多种模型。它将模型权重、配置与数据打包为单一单元,简化定制与创作流程;支持 macOS、Linux 与 Windows。如果你希望不依赖云服务来试验或部署 LLM,它是个绝佳工具,也是最直接的方式——只需执行:
ollama run phi3.5Foundry Local
Foundry Local 是微软的离线、设备端运行时,可完全在自有硬件上运行 Phi 等模型——无需 Azure 订阅、API Key 或网络连接。它自动选择最佳的执行提供程序(NPU、GPU 或 CPU),并暴露 OpenAI 兼容端点,使现有openai/ Azure AI Inference SDK 代码只需极小的改动即可指向它。使用方法如下:
winget install Microsoft.FoundryLocal foundry model run phi-3.5-mini或直接在 Python 中使用 SDK:
pip install foundry-local-sdkfrom foundry_local import FoundryLocalManager manager = FoundryLocalManager("phi-3.5-mini") print(manager.endpoint, manager.api_key)ONNX Runtime for GenAI
ONNX Runtime 是跨平台的机器学习推理与训练加速器。ONNX Runtime for Generative AI(GenAI)则是帮助你在各种平台上高效运行生成式 AI 模型的有力工具。
什么是 ONNX Runtime?ONNX Runtime 是一个开源项目,支持机器学习模型的高性能推理。它支持 ONNX(Open Neural Network Exchange)格式——一种表示机器学习模型的标准。ONNX Runtime 推理可带来更快的用户体验与更低的成本,支持 PyTorch、TensorFlow/Keras 等深度学习框架的模型,也支持 scikit-learn、LightGBM、XGBoost 等经典机器学习库;它兼容不同硬件、驱动与操作系统,并通过利用硬件加速器、图优化与变换提供最佳性能。
什么是生成式 AI?生成式 AI 指能够基于训练数据生成新内容(如文本、图像或音乐)的 AI 系统,典型如 GPT-3 等语言模型与 Stable Diffusion 等图像生成模型。ONNX Runtime for GenAI 库为 ONNX 模型提供生成式 AI 循环,包括 ONNX Runtime 推理、logits 处理、搜索与采样,以及 KV cache 管理。
ONNX Runtime for GenAI 的关键特性:
- 广泛的平台支持:支持 Windows、Linux、macOS、Android 与 iOS;
- 模型支持:支持 LLaMA、GPT-Neo、BLOOM 等众多流行生成式 AI 模型;
- 性能优化:针对 NVIDIA GPU、AMD GPU 等多种硬件加速器进行优化;
- 易用性:提供 API 便于集成进应用,用少量代码即可生成文本、图像等内容;
- 用户可以调用高层的
generate()方法,也可以逐 token 地在循环中执行模型迭代,并可在循环内按需更新生成参数; - 支持 greedy/beam 搜索与 TopP、TopK 采样来生成 token 序列,内置重复惩罚等 logits 处理,也便于添加自定义评分。
快速开始:
# 1. 安装 ONNX Runtime pip install onnxruntime # 2. 安装生成式 AI 扩展 pip install onnxruntime-genai# 3. 运行模型:一个简单的 Python 示例 import onnxruntime_genai as og model = og.Model('path_to_your_model.onnx') tokenizer = og.Tokenizer(model) input_text = "Hello, how are you?" input_tokens = tokenizer.encode(input_text) output_tokens = model.generate(input_tokens) output_text = tokenizer.decode(output_tokens) print(output_text)演示:用 ONNX Runtime GenAI 调用 Phi-3.5-Vision
import onnxruntime_genai as og model_path = './Your Phi-3.5-vision-instruct ONNX Path' img_path = './Your Image Path' model = og.Model(model_path) processor = model.create_multimodal_processor() tokenizer_stream = processor.create_stream() text = "Your Prompt" prompt = "<|user|>\n" prompt += "<|image_1|>\n" prompt += f"{text}<|end|>\n" prompt += "<|assistant|>\n" image = og.Images.open(img_path) inputs = processor(prompt, images=image) params = og.GeneratorParams(model) params.set_inputs(inputs) params.set_search_options(max_length=3072) generator = og.Generator(model, params) while not generator.is_done(): generator.compute_logits() generator.generate_next_token() new_token = generator.get_next_tokens()[0] output = tokenizer_stream.decode(new_token) print(tokenizer_stream.decode(new_token), end='', flush=True)该示例展示了 GenAI 库"逐 token 流式生成"的典型循环:create_multimodal_processor创建多模态处理器处理图文输入,GeneratorParams配置生成参数(如max_length=3072),随后在is_done()循环中交替执行compute_logits()与generate_next_token(),并实时解码输出——这也印证了文档所述"高层generate()与逐 token 循环"两种调用方式。
其他本地推理方案
除 ONNX Runtime、Ollama 与 Foundry Local 外,还可以基于各厂商提供的模型推理方法来运行量化模型,例如 Apple MLX 框架配合 Apple Metal、Qualcomm QNN 配合 NPU、Intel OpenVINO 配合 CPU/GPU 等。更多内容可以在 Phi-3 Cookbook 中获取。
延伸阅读
通过本课你已经掌握了 Phi-3/3.5 家族的基础知识,但要深入理解 SLM 还需要更多知识储备。相关答案都可以在 Phi-3 Cookbook 中找到,它同时覆盖了 Instruct、Vision、MoE 模型的进阶调用与量化部署方法。回到课程主线,还可以继续学习第 20 课(Mistral 开源模型)与第 21 课(Meta Llama 开源模型),以横向对比不同 SLM 家族的推理方式。
【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考