小语言模型(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
小语言模型(Small Language Model,SLM)是大语言模型(LLM)的精简变体,在保留核心语言能力的同时大幅降低计算与内存开销,是边缘设备、移动端和资源受限场景下的理想选择。本指南以微软 Phi-3/3.5 家族为具体范例,系统讲解 SLM 的核心概念、与 LLM 的差异、Phi-3/3.5 各型号定位,以及从云端 API 到本地推理的完整部署路径,帮助读者在真实项目中快速选型并跑通推理。
什么是小语言模型(SLM)
SLM 是语言模型的一个子集,设计目标是生成类人文本。与 GPT-4 这类庞大的同类相比,SLM 更加紧凑高效,非常适合计算资源受限的应用场景。通常,SLM 通过**压缩或蒸馏(distillation)**大型语言模型来构建,力求保留原始模型的大部分功能与语言能力。模型规模的缩减降低了整体复杂度,使 SLM 在内存占用和计算需求上更加高效,同时仍能执行多种自然语言处理(NLP)任务:
- 文本生成:生成连贯、上下文相关的句子或段落;
- 文本补全:根据给定提示预测并补全后续内容;
- 翻译:将文本从一种语言转换为另一种语言;
- 摘要:将长文本压缩为更短、更易读的摘要。
当然,与更大的模型相比,SLM 在性能或理解深度上会有所取舍。SLM 的发展契合了业界对"可在资源受限环境部署的模型"的持续需求——例如移动设备、边缘计算平台,在这些场景下全尺寸 LLM 因资源消耗过高而难以落地。通过聚焦效率,SLM 在性能与可及性之间取得平衡,得以在更多领域广泛应用。
SLM 是如何工作的
SLM 在大规模文本数据上训练。训练期间,模型学习语言的模式与结构,从而能够生成语法正确、语境恰当的内容。其训练流程通常包含:
- 数据收集:从多种来源汇集大规模文本数据集;
- 预处理:清洗并整理数据,使其适合训练;
- 训练:使用机器学习算法教模型理解并生成文本;
- 微调:调整模型以提升其在特定任务上的表现。
LLM 与 SLM 的核心差异
LLM 与 SLM 都建立在概率机器学习的基础原理之上,在架构设计、训练方法、数据生成过程和模型评估技术上遵循相似路线,但两者在多个关键维度存在显著区别。
规模(Size)
LLM 与 SLM 的首要区别在于模型的量级。LLM(如 ChatGPT/GPT-4)参数规模估算达1.76 万亿;而开源 SLM(如 Mistral 7B)参数量显著更少,约为70 亿。这种差距主要源于模型架构与训练过程的差异。例如 ChatGPT 在编码器-解码器框架内使用自注意力机制,而 Mistral 7B 使用滑动窗口注意力(sliding window attention),能够在仅解码器(decoder-only)模型中实现更高效的训练。架构差异对模型复杂度与性能有着深远影响。
理解能力(Comprehension)
SLM 通常针对特定领域进行优化,高度专精,但在跨学科知识的广泛语境理解上可能受限。相反,LLM 旨在更全面地模拟人类智能,在海量、多样化的数据集上训练,擅长跨领域任务,通用性与适应性更强,更适合自然语言处理、编程等更广泛的下游任务。
计算资源(Computing)
LLM 的训练与部署是资源密集型工程,往往需要大规模 GPU 集群等重型算力基础设施。例如从头训练一个类似 ChatGPT 的模型可能需要数千块 GPU 并持续很长时间。而 SLM 参数量更小,在计算资源上更亲民——像 Mistral 7B 这样的模型可在配备中等 GPU 的本地机器上训练和运行(尽管训练仍需要在多块 GPU 上耗时数小时)。
偏见(Bias)
偏见是 LLM 的已知问题,主要源于训练数据本身。LLM 常使用互联网上未经筛选的公开数据,其中某些群体可能被欠代表或错误呈现,并可能引入方言、地域差异和语法规则带来的语言偏见;复杂的 LLM 架构还可能无意间放大偏见,若缺乏细致的微调则难以察觉。相比之下,SLM 在更受约束、领域特定的数据集上训练,天然对这类偏见不那么敏感,但并非完全免疫。
推理速度(Inference)
更小的体量使 SLM 在推理速度上具备显著优势,可在本地硬件上高效产出结果,无需大规模并行处理。而 LLM 因其体积与复杂度,通常需要大量并行计算资源才能达到可接受的推理延迟;在规模化部署且多用户并发时,响应时间会进一步变慢。
典型应用场景
SLM 应用范围广泛,包括:
- 聊天机器人:提供客户支持,与用户进行对话式交互;
- 内容创作:帮助写作者生成灵感,甚至起草整篇文章;
- 教育:辅助学生完成写作作业或学习新语言;
- 无障碍:为残障人士打造工具,例如文本转语音系统。
注:本课以 Microsoft Phi-3 / 3.5 为例来介绍 SLM。
Phi-3 / Phi-3.5 家族全景
Phi-3/3.5 家族主要覆盖文本(Instruct)、**视觉(Vision)与智能体/混合专家(MoE)**三大应用场景。与 LLM 不同,Phi-3/3.5-mini 或 Phi-3/3.5-Vision 可以直接部署到边缘设备上。
Phi-3 / 3.5 Instruct(文本指令模型)
Instruct 系列主要用于文本生成、对话补全和内容信息抽取等任务。
- Phi-3-mini:3.8B 参数的语言模型,可在 Azure AI Foundry(原 Foundry 模型目录)、Hugging Face 与 Ollama 上获取。Phi-3 模型在关键基准测试上显著优于同规模甚至更大规模的语言模型(基准数值越大越好)。Phi-3-mini 超越了两倍体量的模型,而 Phi-3-small 与 Phi-3-medium 则超越包括 GPT-3.5 在内的更大模型。
- Phi-3-small & medium:仅 7B 参数的 Phi-3-small 在语言、推理、编码和数学的多种基准上击败 GPT-3.5T;14B 参数的 Phi-3-medium 延续这一趋势,超越了 Gemini 1.0 Pro。
- Phi-3.5-mini:可视为 Phi-3-mini 的升级版。参数量未变,但提升了多语言支持能力(支持 20+ 种语言:阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语),并加入更强的长上下文支持。Phi-3.5-mini 以 3.8B 参数超越同规模模型,并与两倍体量模型持平。
Phi-3 / 3.5 Vision(视觉模型)
可以把 Phi-3/3.5 的 Instruct 模型理解为"理解能力",而 Vision 则是赋予 Phi "观察世界"的眼睛。
- Phi-3-Vision:仅 4.2B 参数,在通用视觉推理、OCR(光学字符识别)、表格与图表理解任务上超越 Claude-3 Haiku、Gemini 1.0 Pro V 等更大的模型。
- Phi-3.5-Vision:Phi-3-Vision 的升级版,新增多图像支持,不仅可以看图,还能处理视频。它在 OCR、表格与图表理解任务上超越 Claude-3.5 Sonnet、Gemini 1.5 Flash 等更大模型,在通用视觉知识与推理上与之持平;支持多帧输入,即基于多张输入图像进行推理。
Phi-3.5-MoE(混合专家模型)
混合专家(Mixture of Experts,MoE)使模型能够以远低于稠密模型的算力完成预训练——这意味着在相同算力预算下,可以大幅扩展模型或数据集规模。特别是,MoE 模型在预训练期间应能比稠密对应模型更快达到同等质量。
Phi-3.5-MoE 由16×3.8B 专家模块组成,仅6.6B 激活参数就能达到与更大模型相当的推理、语言理解和数学水平。仓库中的 phi35_moe_demo.ipynb 加载模型后打印出的PhiMoEForCausalLM结构即为该架构的源码级证据:模型包含 32 层PhiMoEDecoderLayer,每层由一个PhiMoESparseMoeBlock组成——其中gate是一个输出维度为 16 的线性层(对应 16 个专家),experts是 16 个PhiMoEBlockSparseTop2MLP专家模块,即每 token 由门控网络路由到 Top-2 专家,从而实现"稀疏激活、稠密容量"。
云端推理:通过 API 调用 Phi-3/3.5
GitHub Models / Microsoft Foundry Models
GitHub Models 是最直接的入门方式,可快速通过模型目录访问 Phi-3/3.5-Instruct 模型。结合 Azure AI Inference SDK / OpenAI SDK,即可通过代码访问 API 并完成 Phi-3/3.5-Instruct 调用,也可以在 Playground 中测试不同效果。
下面是一组中文场景下 Phi-3-mini 与 Phi-3.5-mini 的效果对比演示。图中可以看到,面对"长沙在哪里"这一问题时,Phi-3-mini 的回答存在事实性错误(将湖南省误写为浙江省),而 Phi-3.5-mini 给出了正确回答:"长沙是中国湖南省的省会"——直观体现了模型迭代在事实准确性上的改进:
注:GitHub Models 将于 2026 年 7 月底停止服务,Microsoft Foundry Models 是其直接替代方案。如需使用视觉与 MoE 模型,同样可以通过 Microsoft Foundry 完成调用。
NVIDIA NIM
除云端的模型目录外,还可以使用 NVIDIA NIM 完成 Phi-3/3.5 家族的 API 调用。NVIDIA NIM(NVIDIA Inference Microservices)是一组加速推理微服务,帮助开发者跨云端、数据中心和工作站等环境高效部署 AI 模型。其关键特性包括:
- 部署简单:一条命令即可部署 AI 模型,便于集成到现有工作流;
- 性能优化:基于 NVIDIA 预优化推理引擎(如 TensorRT、TensorRT-LLM),保证低延迟与高吞吐;
- 可扩展性:支持在 Kubernetes 上自动扩缩容,有效应对不同负载;
- 安全可控:组织可自托管 NIM 微服务,对自有数据和应用保持控制;
- 标准 API:提供行业标准 API,易于构建聊天机器人、AI 助手等应用。
NIM 是 NVIDIA AI Enterprise 的一部分,旨在简化 AI 模型的部署与运营,确保其在 NVIDIA GPU 上高效运行。
仓库中的 Phi-3-Vision-Nividia-NIM.ipynb 展示了完整的调用流程:将图片读取后经 base64 编码(小于 180KB 直接内联,更大图片需走 assets API),以https://ai.api.nvidia.com/v1/vlm/microsoft/phi-3-vision-128k-instruct为端点,在请求头携带Authorization: Bearer <你的 NIM API Key>,通过requests.post发送包含messages、max_tokens、temperature、top_p、stream字段的 payload;返回结果从response.json()["choices"][0]["message"]["content"]中取出,再从 Markdown 代码块中切分出模型生成的 Python 代码。这套"图片 + 指令"的 payload 结构是调用视觉模型的标准范式。
本地推理:在自有硬件上运行 Phi-3/3.5
推理(Inference)指的是模型根据输入生成响应或预测的过程。当向 Phi-3 提供提示或问题时,它利用训练好的神经网络,分析训练数据中的模式与关系,推断出最可能、最相关的回答。
使用 Hugging Face Transformers
Hugging Face Transformers 是为 NLP 及其他机器学习任务设计的强大库,要点包括:
- 预训练模型:提供数千个预训练模型,覆盖文本分类、命名实体识别、问答、摘要、翻译和文本生成等任务;
- 框架互操作:支持 PyTorch、TensorFlow、JAX 等多个深度学习框架,可在一种框架中训练、在另一种框架中使用;
- 多模态能力:除 NLP 外还支持计算机视觉(图像分类、目标检测)与音频处理(语音识别、音频分类)任务;
- 易用性:提供便捷的模型下载与微调 API,初学者与专家均可上手;
- 社区与资源:拥有活跃的社区与详尽的文档、教程和指南。
这是最常用的推理方式,但同样需要 GPU 加速——Vision 和 MoE 场景计算量大,若不量化,在 CPU 上会非常慢。仓库中提供了三个基于 Transformers 的完整演示:
- phi35-instruct-demo.ipynb:调用 Phi-3.5-Instruct。核心流程是
AutoModelForCausalLM.from_pretrained加载模型(device_map="cuda"、torch_dtype="auto"、trust_remote_code=True),AutoTokenizer加载分词器,按 Phi 的聊天模板构造消息(<|system|>...<|end|><|user|>...<|end|><|assistant|>),再用pipeline("text-generation")配合生成参数(max_new_tokens=1024、temperature=0.3、do_sample=False)产出中文回答。 - phi35-vision-demo.ipynb:调用 Phi-3.5-Vision 的多帧推理。先用 OpenCV 从视频中按直方图相似度(
cv2.compareHist,相似度 < 0.9)抽取关键帧,通过AutoProcessor(num_crops=4)处理文本与图像,apply_chat_template生成提示,占位符按<|image_n|>逐个插入,最终model.generate对 21 帧图像做"Summarize the video"视频摘要——这正是 Phi-3.5-Vision 多帧输入能力的落地示例。 - phi35_moe_demo.ipynb:调用 Phi-3.5-MoE 构建工具调用式智能体。以
bfloat16精度加载模型(device_map='auto'),通过instruction_format函数拼装 system/user/assistant 提示,让模型以 JSON 格式输出agentid、tool_name、input、output字段,实现"Blog 写作 + Translate 翻译"的多步 Agent 工作流(示例输出会先生成英文博客内容,再翻译为中文)。
使用 Ollama 本地一键运行
Ollama 是一个让你在本地电脑上轻松运行 LLM 的平台,支持 Llama 3.1、Phi 3、Mistral、Gemma 2 等众多模型。它将模型权重、配置和数据打包为单一分发包,方便用户自定义与创作自己的模型;支持 macOS、Linux 和 Windows。若不想依赖云服务来实验或部署 LLM,Ollama 是最直接的方式——只需执行一条命令:
ollama run phi3.5使用 Foundry 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(Open Neural Network Exchange)格式的模型,兼容 PyTorch、TensorFlow/Keras 等深度学习框架以及 scikit-learn、LightGBM、XGBoost 等经典机器学习库,并针对不同硬件、驱动与操作系统提供图优化与变换以获得最佳性能。ONNX Runtime for Generative AI(GENAI)在此基础上扩展出生成式 AI 能力,核心特性包括:
- 平台支持广泛:覆盖 Windows、Linux、macOS、Android、iOS;
- 模型支持丰富:支持 LLaMA、GPT-Neo、BLOOM 等流行生成式模型;
- 性能优化:针对 NVIDIA GPU、AMD GPU 等多种硬件加速器做了优化;
- 使用简单:提供高层
generate()方法,也可在循环中逐 token 迭代并动态调整生成参数; - 解码策略完善:内置 greedy/beam search 与 TopP、TopK 采样,以及重复惩罚等 logits 处理,还可方便地添加自定义评分。
安装与最小示例:
pip install onnxruntime pip install onnxruntime-genaiimport 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)调用 Phi-3.5-Vision(多模态):通过model.create_multimodal_processor()创建多模态处理器,按<|user|>\n<|image_1|>\n{text}<|end|>\n<|assistant|>组装提示,og.Images.open打开图片,GeneratorParams设置输入与搜索选项(示例中max_length=3072),随后循环执行compute_logits/generate_next_token/get_next_tokens,并用流式解码逐 token 输出结果:
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)其他本地推理方案
除 ONNX Runtime、Ollama 和 Foundry Local 外,还可依据各家厂商的模型引用方式完成量化模型的推理,例如基于 Apple Metal 的 Apple MLX 框架、基于 NPU 的 Qualcomm QNN、基于 CPU/GPU 的 Intel OpenVINO 等,更多内容可参考 Phi-3 Cookbook 获取。
小结
从本课可以看出,SLM 与 LLM 共享机器学习的底层基础,但在模型规模、资源需求、语境理解、偏见敏感度与推理速度上差异显著:LLM 更通用但资源开销大,SLM 则以更低的计算需求提供领域化效率。以 Phi-3/3.5 家族为例,Instruct 负责文本、Vision 负责视觉、MoE 负责高性价比稀疏推理,三者既可经由 GitHub Models / Foundry / NVIDIA NIM 等云端 API 快速接入,也可借助 Hugging Face Transformers、Ollama、Foundry Local 与 ONNX Runtime for GenAI 在本地乃至边缘设备上落地。仓库内四个可直接运行的 notebook(Instruct、Vision、MoE、NVIDIA NIM)提供了从环境准备到生成结果的全流程参考,可在此基础上按需替换模型与提示,快速搭建自己的 SLM 应用。
【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考