Generative AI for Beginners 第 19 课:小语言模型(SLM)与 Microsoft Phi-3/3.5 家族推理实战指南 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 的基本原理与选型思路并能够通过云 APIFoundry 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 通过压缩或蒸馏distillLLM 构建目标是保留原模型绝大部分的功能与语言能力。模型规模的缩减降低了整体复杂度使 SLM 在内存占用与算力需求上更加高效——当然相比更大的模型SLM 在性能或理解深度上会做出一定取舍。SLM 是如何工作的SLM 在海量文本数据上训练而成。训练过程中模型学习语言的模式与结构从而生成语法正确、语境恰当的输出。其训练流程主要包括四个环节数据收集从多种来源采集大规模文本数据集预处理清洗与整理数据使其适合训练训练使用机器学习算法教会模型理解并生成文本微调Fine-tuning针对特定任务调整模型以提升其专项表现。SLM 的发展与在资源受限环境中部署模型的需求高度契合——例如移动设备与边缘计算平台在这些场景下全尺寸 LLM 因资源需求过高而难以落地。通过聚焦效率SLM 在性能与可访问性之间取得平衡从而在更多领域获得广泛应用。学习目标本课的目标是将 SLM 的知识与 Microsoft Phi-3/3.5 家族结合学习文本内容、视觉与 MoE 三个不同场景。学完本课你应当能够回答什么是 SLMSLM 与 LLM 的区别是什么Microsoft Phi-3/3.5 家族包含哪些模型如何用 Microsoft Phi-3/3.5 家族完成推理LLM 与 SLM 的五大核心差异LLM 与 SLM 都建立在概率机器学习的基础原则上在架构设计、训练方法、数据生成过程与模型评估技术上有相似之处但在以下关键维度上存在明显分野。尺寸SizeLLM 与 SLM 的首要区别在于模型规模。像 ChatGPTGPT-4这样的 LLM 参数规模估计高达约 1.76 万亿而 Mistral 7B 这类开源 SLM 的参数仅约 70 亿。这种悬殊主要源于模型架构与训练过程的差异例如 ChatGPT 在 encoder-decoder 框架内采用 self-attention 机制而 Mistral 7B 使用滑动窗口注意力sliding window attention在仅 decoder 模型内实现更高效的训练。架构差异对模型的复杂度与性能有着深远影响。理解ComprehensionSLM 通常针对特定领域进行优化高度专精但在跨知识领域提供广泛语境理解的能力上可能受限。相反LLM 旨在更全面地模拟类人智能——它们在庞大而多样的数据集上训练被设计为在多个领域都表现出色具备更强的通用性与适应性因此更适合范围更广的下游任务如自然语言处理与编程。计算ComputingLLM 的训练与部署是资源密集型过程往往需要大规模 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 家族主要面向文本、视觉与 AgentMoE三类应用场景。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.5T140 亿参数的 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-MoEAgent 场景混合专家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 ModelsGitHub 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 页面获取凭据以ChatCompletionsClientAzureKeyCredential构造客户端再通过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 StudioFoundry完成调用。感兴趣的话可以在 Phi-3 Cookbook 中查阅如何通过 Azure AI Studio 调用 Phi-3/3.5 的 Instruct、Vision、MoE 模型。NVIDIA NIM除了 Azure 与 GitHub 提供的云模型目录方案还可以使用NVIDIA NIM完成相关调用。NVIDIA NIMNVIDIA 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: fTell me what is in the picture img srcdata:image/png;base64,{image_b64} / } ], max_tokens: 1024, temperature: 0.6, top_p: 1.0, stream: False } response requests.post(invoke_url, headersheaders, jsonpayload) print(response.json())该 notebook 还演示了将 base64 图片嵌入用户消息的img srcdata:image/png;base64,... /语法并给出对超大图片base64 长度超过约 18 万字符改用 assets API 的断言提示。本地运行 Phi-3/3.5与 Phi-3 或 GPT-3 等任何语言模型相关的推理inference指的是基于输入生成响应或预测的过程当你向 Phi-3 提供 prompt 或问题时它利用训练好的神经网络通过分析训练数据中的模式与关系推断出最可能且最相关的回答。Hugging Face TransformersHugging Face Transformers 是为 NLP 及其他机器学习任务设计的强大库关键特点包括预训练模型提供数千个预训练模型可用于文本分类、命名实体识别、问答、摘要、翻译与文本生成等任务框架互操作支持 PyTorch、TensorFlow 与 JAX 等多个深度学习框架可在一种框架中训练、在另一种框架中使用多模态能力除 NLP 外还支持计算机视觉如图像分类、目标检测与音频处理如语音识别、音频分类易用性提供 API 与工具轻松下载与微调模型初学者与专家皆可上手社区与资源拥有活跃的社区及丰富的文档、教程与指南。这是最常用的方法但也需要 GPU 加速——毕竟 Vision 与 MoE 等场景计算量大若不量化在 CPU 上会非常慢。仓库为三种场景各提供了一个 Transformers 演示 notebookInstructphi35-instruct-demo.ipynb 演示如何调用 Phi-3.5-Instruct。核心流程用AutoModelForCausalLM.from_pretrained(..., device_mapcuda, torch_dtypeauto, trust_remote_codeTrue)加载模型用AutoTokenizer.from_pretrained加载分词器再以pipeline(text-generation, modelmodel, tokenizertokenizer)构建管线并传入 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])Visionphi35-vision-demo.ipynb 演示多帧视频理解先用 OpenCV 从视频中抽取关键帧直方图相关性低于阈值的帧构造|image_1|...|image_n|占位符再用AutoProcessor.from_pretrained(model_id, trust_remote_codeTrue, num_crops4)处理图文输入以flash_attention_2注意力实现加载模型from transformers import AutoModelForCausalLM, AutoProcessor model AutoModelForCausalLM.from_pretrained( model_id, device_mapcuda, trust_remote_codeTrue, torch_dtypeauto, _attn_implementationflash_attention_2 ) processor AutoProcessor.from_pretrained(model_id, trust_remote_codeTrue, num_crops4) prompt processor.tokenizer.apply_chat_template(messages, tokenizeFalse, add_generation_promptTrue) inputs processor(prompt, images, return_tensorspt).to(cuda:0) generate_ids model.generate(**inputs, eos_token_idprocessor.tokenizer.eos_token_id, max_new_tokens1000, temperature0.0, do_sampleFalse) response processor.batch_decode(generate_ids[:, inputs[input_ids].shape[1]:], skip_special_tokensTrue, clean_up_tokenization_spacesFalse)[0]MoEphi35_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_codeTrue, torch_dtypebfloat16, device_mapauto ) 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})OllamaOllama 是一个让 LLM 在本地机器上更容易运行的平台支持 Llama 3.1、Phi 3、Mistral、Gemma 2 等多种模型。它将模型权重、配置与数据打包为单一单元简化定制与创作流程支持 macOS、Linux 与 Windows。如果你希望不依赖云服务来试验或部署 LLM它是个绝佳工具也是最直接的方式——只需执行ollama run phi3.5Foundry LocalFoundry 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 中使用 SDKpip install foundry-local-sdkfrom foundry_local import FoundryLocalManager manager FoundryLocalManager(phi-3.5-mini) print(manager.endpoint, manager.api_key)ONNX Runtime for GenAIONNX Runtime 是跨平台的机器学习推理与训练加速器。ONNX Runtime for Generative AIGenAI则是帮助你在各种平台上高效运行生成式 AI 模型的有力工具。什么是 ONNX RuntimeONNX Runtime 是一个开源项目支持机器学习模型的高性能推理。它支持 ONNXOpen 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-Visionimport 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, imagesimage) params og.GeneratorParams(model) params.set_inputs(inputs) params.set_search_options(max_length3072) 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, flushTrue)该示例展示了 GenAI 库逐 token 流式生成的典型循环create_multimodal_processor创建多模态处理器处理图文输入GeneratorParams配置生成参数如max_length3072随后在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),仅供参考