ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

生成式 AI 入门的小语言模型(SLM)实战:用 Microsoft Phi-3/3.5 家族跑通文本、视觉与 MoE 推理

生成式 AI 入门的小语言模型(SLM)实战:用 Microsoft Phi-3/3.5 家族跑通文本、视觉与 MoE 推理 生成式 AI 入门的小语言模型SLM实战用 Microsoft Phi-3/3.5 家族跑通文本、视觉与 MoE 推理【免费下载链接】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是生成式 AI 领域中面向资源受限场景的重要分支。本篇技术指南以本课程第 19 课 19-slm/README.md 为核心骨架系统讲解 SLM 的定义、与大型语言模型LLM的差异以及 Microsoft Phi-3 / Phi-3.5 家族在文本生成、视觉理解和混合专家MoE三个典型场景下的推理实践。读完本文你将掌握 SLM 的核心原理并能在云端 APIMicrosoft Foundry Models、NVIDIA NIM与本地运行环境Hugging Face Transformers、Ollama、Foundry Local、ONNX Runtime for GenAI中完成 Phi-3/3.5 系列模型的调用与部署。什么是小语言模型SLM小语言模型是大型语言模型LLM的缩小型变体它继承了 LLM 的大量架构原则与技术手段但计算占用显著降低。SLM 是语言模型的子集专门用于生成类人文本。与 GPT-4 这样的大模型不同SLM 更加紧凑、高效非常适合计算资源有限的场景。SLM 通常通过对 LLM 进行压缩compression或蒸馏distillation来构建目标是尽量保留原始模型的功能性与语言能力。模型规模的缩减降低了整体复杂度使 SLM 在内存占用与计算需求方面都更高效。尽管如此SLM 仍能胜任多种自然语言处理NLP任务文本生成Text Generation生成连贯、上下文相关的句子或段落文本补全Text Completion基于给定提示预测并补全句子翻译Translation将文本从一种语言转换到另一种语言摘要Summarization将长文本压缩为更短、更易消化的摘要。当然与更大的模型相比SLM 在性能或理解深度上会存在一些权衡。本课程第 1 课 01-introduction-to-genai/README.md 对生成式 AI 的基础概念有更完整的铺垫。如上图所示SLM 的四大核心优势包括成本效益Cost effective、部署灵活性Deployment Flexibility、超低延迟Ultra-low Latency以及更易管理与微调Easier to manage and fine-tune。SLM 是如何工作的SLM 在大量文本数据上训练而成。训练过程中模型学习语言的模式与结构从而能够生成语法正确且上下文恰当的文本。典型的训练流程包括数据收集Data Collection从各种来源收集大规模文本数据集预处理Preprocessing清洗并整理数据使其适合训练训练Training使用机器学习算法教会模型理解与生成文本微调Fine-Tuning针对特定任务调整模型以提升性能。SLM 的发展与资源受限环境如移动设备、边缘计算平台对模型的需求相契合——在这些环境中全尺寸 LLM 因其高昂的资源需求往往不切实际。通过聚焦效率SLM 在性能与可及性之间取得平衡从而在更多领域获得广泛应用。学习目标本课希望通过 Microsoft Phi-3 的实例带领读者学习 SLM 的知识并掌握文本内容、视觉Vision与混合专家MoE等不同场景下的应用。学完本课你应该能回答以下问题什么是 SLMSLM 与 LLM 的区别是什么Microsoft Phi-3 / 3.5 家族是什么如何使用 Microsoft Phi-3 / 3.5 家族进行推理InferenceLLM 与 SLM 的区别LLM 与 SLM 都建立在概率机器学习的根本原理之上在架构设计、训练方法、数据生产过程与模型评估技术上遵循相似路径。然而以下几个关键因素将两者区分开来。大小SizeLLM 与 SLM 的首要区别在于模型规模。LLM 如 ChatGPTGPT-4估计拥有约 1.76 万亿参数而开源 SLM 如 Mistral 7B 的参数约 70 亿。这一差距主要源于模型架构与训练过程的差异例如 ChatGPT 在编码器-解码器框架中使用自注意力机制而 Mistral 7B 采用滑动窗口注意力sliding window attention能够在仅解码器decoder-only模型中实现更高效的训练。架构差异对模型的复杂度与性能有着深远影响。理解能力ComprehensionSLM 通常在特定领域内表现更优高度专精但在跨知识领域的广泛上下文理解上可能受限。相比之下LLM 旨在更全面地模拟类人智能——在庞大、多样的数据集上训练设计上就期望在多个领域表现良好因而通用性与适应性更强更适合自然语言处理、编程等广泛的下游任务。计算需求ComputingLLM 的训练与部署是资源密集型过程往往需要大规模 GPU 集群等重计算基础设施例如从零训练 ChatGPT 这样的模型可能需要数千块 GPU 持续运行很长时间。而 SLM 参数更少计算资源门槛更低——像 Mistral 7B 这样的模型可以在配备中等 GPU 能力的本地机器上训练和运行尽管训练仍需要多块 GPU 上数小时。偏见Bias偏见是 LLM 中的已知问题主要源于训练数据本身。LLM 常依赖互联网上开放获取的原始数据这些数据可能对某些群体代表性不足或描述错误、引入错误标注或反映受方言、地域差异和语法规则影响的语言偏见。此外LLM 架构的复杂性可能在无意中放大偏见若未仔细微调则难以察觉。而 SLM 基于更受约束、领域特定的数据集训练对这类偏见的敏感性天然更低——但并非免疫。推理InferenceSLM 的较小体积赋予其显著的推理速度优势能够在本地硬件上高效生成输出无需大规模并行处理。而 LLM 由于体积与复杂度往往需要大量的并行计算资源才能达到可接受的推理时间多用户并发还会进一步拖慢 LLM 的响应速度尤其是在大规模部署时。维度LLMSLM参数规模巨大如 GPT-4 约 1.76 万亿较小如 Mistral 7B 约 70 亿领域泛化跨领域通用性强领域专精通用理解受限计算资源需要大规模 GPU 集群中等 GPU 即可本地运行偏见敏感性较高依赖互联网原始数据较低领域受限数据集推理速度依赖并行计算本地硬件即可高效推理总结而言LLM 与 SLM 共享机器学习的根基但在模型大小、资源需求、上下文理解、偏见敏感性与推理速度方面差异显著。LLM 更通用但资源重SLM 则提供领域特定的高效率与更低的计算需求。注本课将以 Microsoft Phi-3 / 3.5 为例介绍 SLM。SLM 的应用场景SLM 的应用非常广泛包括但不限于聊天机器人Chatbots提供客户支持并以对话方式与用户互动内容创作Content Creation辅助写作者生成创意甚至起草整篇文章教育Education帮助学生完成写作任务或学习新语言无障碍Accessibility为残障人士构建工具例如文本转语音Text-to-Speech系统。认识 Phi-3 / Phi-3.5 家族Phi-3 / 3.5 家族主要面向**文本Text、视觉Vision与 AgentMoE**三类应用场景。全系列以 MIT 许可证开源并已完成指令调优Instruction Tuned与安全对齐RAI Safety Aligned。Phi-3 / 3.5 Instruct主要面向文本生成、聊天补全、内容信息抽取等任务。Phi-3-mini3.8B 语言模型可在 Microsoft 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.5T14B 参数的 Phi-3-medium 延续这一趋势超越 Gemini 1.0 Pro。Phi-3.5-mini可视为 Phi-3-mini 的升级版。参数不变但增强了多语言支持支持 20 语言阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语并加强了对长上下文long context的支持。3.8B 参数的 Phi-3.5-mini 在同类模型中表现领先与两倍于自身规模的模型持平。Phi-3 / 3.5 Vision可以把 Phi-3/3.5 的 Instruct 模型理解为Phi 的理解能力而 Vision 则是给 Phi 一双看世界的眼睛。Phi-3-Vision仅 4.2B 参数在通用视觉推理、OCR、表格与图表理解等任务上超越 Claude-3 Haiku 与 Gemini 1.0 Pro V 等更大模型。Phi-3.5-VisionPhi-3-Vision 的升级版新增多图支持——不仅能看图片还能理解视频。它在 OCR、表格与图表理解任务上超越 Claude-3.5 Sonnet 与 Gemini 1.5 Flash在通用视觉知识推理任务上与之持平并支持多帧输入multi-frame input即可以对多张输入图片进行联合推理。Phi-3.5-MoE混合专家Mixture of Experts, MoE使模型可以用远少于密集模型的计算量进行预训练这意味着在相同计算预算下可以大幅扩展模型或数据集规模。尤其是MoE 模型在预训练阶段能以更快速度达到与其密集版本相同的质量。Phi-3.5-MoE 由16×3.8B 专家模块组成仅 6.6B 激活参数即可达到与更大模型同级的推理、语言理解与数学能力。仓库中的演示 Notebook phi35_moe_demo.ipynb 打印出的模型结构可以佐证这一点模型包含 32 层PhiMoEDecoderLayer每层通过PhiMoESparseMoeBlock路由gate 输出维度为 16到 16 个PhiMoEBlockSparseTop2MLP专家整体以 bfloat16 精度加载加载时被切分为 17 个 checkpoint 分片。与 LLM 不同你可以将 Phi-3/3.5-mini 或 Phi-3/3.5-Vision 部署到边缘设备edge devices上。如何运行 Phi-3/3.5 家族模型根据不同的应用场景可以选择云端 API 或本地运行两条路线。通过云端 API 进行推理Microsoft Foundry ModelsMicrosoft Foundry Models 是最直接的途径你可以通过 Foundry 模型目录快速访问 Phi-3/3.5-Instruct 模型配合 Azure AI Inference SDK / OpenAI SDK用代码访问 API 完成 Phi-3/3.5-Instruct 调用也可以在 Playground 中测试不同效果。注根据本仓库英文原版 19-slm/README.md 的说明GitHub Models 已于 2026 年 7 月底退役Microsoft Foundry Models 是其直接替代方案。下面的演示对比了 Phi-3-mini 与 Phi-3.5-mini 在中文场景下的效果差异。向两个模型提出同样的问题长沙在哪里从截图可以看到Phi-3-mini 错误地回答长沙是中国的省会位于中国浙江省而 Phi-3.5-mini 正确指出长沙是中国湖南省的省会……横跨湘江两岸直观体现了模型迭代后多语言能力的提升。如果希望使用 Vision 与 MoE 模型也可以通过 Microsoft Foundry 完成调用详见英文原版文档中对 Phi-3 Cookbook 的指引。NVIDIA NIM除了 Microsoft Foundry Models 提供的云端模型目录还可以使用 NVIDIA NIM 完成 Phi-3/3.5 家族的相关 API 调用。NVIDIA NIMNVIDIA Inference Microservices是一组加速推理微服务帮助开发者在云、数据中心、工作站等各种环境中高效部署 AI 模型。其主要特性包括易于部署Ease of Deployment单条命令即可部署 AI 模型便于集成进现有工作流优化性能Optimized Performance借助 NVIDIA 预优化推理引擎如 TensorRT 与 TensorRT-LLM保证低延迟与高吞吐可扩展性Scalability支持在 Kubernetes 上自动扩缩容应对变化的工作负载安全与控制Security and Control组织可自托管 NIM 微服务到自有受管基础设施上保持对数据与应用的控制标准 APIStandard APIs提供行业标准 API便于构建与集成聊天机器人、AI 助手等应用。NIM 是 NVIDIA AI Enterprise 的一部分旨在简化 AI 模型的部署与运营确保其在 NVIDIA GPU 上高效运行。仓库中的演示 Notebook Phi-3-Vision-Nividia-NIM.ipynb 展示了通过 NIM 调用 Phi-3 Vision API 的完整流程将本地图片读入并以 base64 编码通过requests.post向 NIM 的视觉语言模型端点https://ai.api.nvidia.com/v1/vlm/microsoft/phi-3-vision-128k-instruct发送请求请求头携带Authorization: Bearer Your Nvidia NIM API Key消息内容中通过img srcdata:image/png;base64,... /内联图片并设置max_tokens1024、temperature0.6、top_p1.0与可选的stream参数随后从响应choices[0].message.content中提取模型生成的代码再剥离 Markdown 代码块标记得到可直接执行的 Python 代码。在本地运行 Phi-3/3.5推理Inference对于 Phi-3 或任何语言模型如 GPT-3而言是指基于收到的输入生成响应或预测的过程。当你向 Phi-3 提供提示或问题时它会利用训练好的神经网络通过分析训练数据中的模式与关系推断出最可能且最相关的响应。Hugging Face TransformersHugging Face Transformers 是为 NLP 及其他机器学习任务设计的强大库关键特点包括预训练模型Pretrained Models提供数千个预训练模型可用于文本分类、命名实体识别、问答、摘要、翻译与文本生成等任务框架互操作Framework Interoperability支持 PyTorch、TensorFlow 与 JAX 等多个深度学习框架可在一种框架中训练、在另一种框架中使用多模态能力Multimodal Capabilities除 NLP 外还支持计算机视觉如图像分类、目标检测与音频处理如语音识别、音频分类任务易用性Ease of Use提供便捷的 API 与工具下载、微调模型对新手与专家都很友好社区与资源Community and Resources拥有活跃的社区以及丰富的文档、教程与指南。这是最常用的方法但同样需要 GPU 加速——毕竟 Vision 与 MoE 等场景计算量巨大若未量化在 CPU 上会非常慢。仓库中的演示 Notebook phi35-instruct-demo.ipynb 展示了用 Transformers 调用 Phi-3.5-Instruct 的完整代码import torch from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline torch.random.manual_seed(0) model AutoModelForCausalLM.from_pretrained( ../phi-3-instruct, device_mapcuda, torch_dtypeauto, trust_remote_codeTrue, ) tokenizer AutoTokenizer.from_pretrained(../phi-3-instruct) # Phi-3 系列使用特殊的聊天模板格式 # |system| ... |end| |user| ... |end| |assistant| messages |system|\n 你是我的人工智能助手协助我用中文解答问题.\n|end||user|\n 你知道长沙吗\n|end||assistant| pipe pipeline(text-generation, modelmodel, tokenizertokenizer) 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])从源码可见几个关键点加载时需设置trust_remote_codeTruePhi 系列依赖自定义模型代码推理直接基于课程准备的本地模型目录../phi-3-instruct生成参数中max_new_tokens1024控制最大新生成 token 数temperature0.3配合do_sampleFalse采用确定性解码。演示以中文提问你知道长沙吗模型给出了关于长沙的地理、历史与文化介绍。Vision 场景phi35-vision-demo.ipynb 展示了 Phi-3.5-Vision 的多帧理解能力。Notebook 先用 OpenCV 从视频中提取关键帧通过比较相邻帧灰度直方图相关性低于 0.9 判定为镜头切换并保存为keyframe_N.jpg再用 PIL 读取 21 个关键帧构造包含|image_1|...|image_N|占位符与Summarize the video.指令的多图消息最后通过AutoProcessor.from_pretrained(model_id, trust_remote_codeTrue, num_crops4)处理输入、以flash_attention_2注意力实现加载模型并生成摘要输出对视频内容的整体描述。这正是 Phi-3.5-Vision 多帧推理能力的典型用法。MoE 场景phi35_moe_demo.ipynb 展示如何用 Phi-3.5-MoE 构建一个简单的 Agent 工作流系统提示词定义 Blog撰写并转成社媒风格内容与 Translate翻译两个工具要求模型以 JSON 格式输出包含tool_name、input、output字段的步骤数组模型加载时使用torch_dtypebfloat16与device_mapauto以降低显存压力并按|system|...|end|\n|user|...|end|\n|assistant|模板拼装输入。实际运行中模型针对写一段关于 Generative AI with MoE 的内容并翻译成中文的查询依次输出Blog步骤与Translate步骤最终给出中文结果——展示了 MoE 模型在工具调用与多步任务上的能力。OllamaOllama 是一个旨在让你在本地机器上轻松运行 LLM 的平台支持 Llama 3.1、Phi 3、Mistral、Gemma 2 等多种模型。它通过将模型权重、配置与数据打包进单一包来简化流程便于用户定制与创建自己的模型支持 macOS、Linux 与 Windows。如果你希望在无需依赖云服务的情况下实验或部署 LLMOllama 是最直接的途径之一只需执行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是一个开源项目支持机器学习模型的高性能推理。它支持 Open Neural Network ExchangeONNX格式的模型表示机器学习模型的标准格式可带来更快的客户体验与更低的成本支持 PyTorch、TensorFlow/Keras 等深度学习框架以及 scikit-learn、LightGBM、XGBoost 等经典机器学习库的模型并兼容不同的硬件、驱动与操作系统通过图优化与变换、在适用处利用硬件加速器提供最优性能。ONNX Runtime for GenAI扩展了 ONNX Runtime 的能力以支持生成式 AI 模型其主要特性包括广泛的平台支持Broad Platform Support支持 Windows、Linux、macOS、Android、iOS 等多种平台模型支持Model Support支持 LLaMA、GPT-Neo、BLOOM 等众多流行的生成式 AI 模型性能优化Performance Optimization包含针对 NVIDIA GPU、AMD GPU 等不同硬件加速器的优化易用性Ease of Use提供便于集成进应用的 API用极简代码即可生成文本、图像等内容用户既可以调用高层generate()方法也可以在循环中逐步运行模型每次迭代、一次生成一个 token并可在循环内更新生成参数支持贪心/束搜索greedy/beam search与 TopP、TopK 采样来生成 token 序列内置重复惩罚repetition penalties等 logits 处理也可轻松添加自定义评分逻辑。ONNX Runtime for GenAI 为 ONNX 模型提供完整的生成式 AI 循环包括 ONNX Runtime 推理、logits 处理、搜索与采样以及 KV 缓存管理。安装与入门pip install onnxruntime pip install onnxruntime-genai运行模型的最小示例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)这段代码展示了逐 token 生成的底层流程GeneratorParams.set_search_options(max_length3072)限制生成序列最大长度循环中依次计算 logits、生成下一 token 并实时流式解码输出读者可以借此理解生成式 AI 推理循环的内部机制。其他本地推理方式除 ONNX Runtime、Ollama 与 Foundry Local 之外还可以依据各厂商提供的模型推理方式对量化模型进行推理例如 Apple MLX 框架配合 Apple Metal、Qualcomm QNN 配合 NPU、Intel OpenVINO 配合 CPU/GPU 等。更多内容可参考英文原版文档 19-slm/README.md 中指向的 Phi-3 Cookbook 资料。小结与延伸本课介绍了 SLM 的基础知识并围绕 Microsoft Phi-3/3.5 家族讲解了SLM 的定义、工作原理与典型 NLP 任务LLM 与 SLM 在大小、理解、计算、偏见与推理速度五个维度的差异Phi-3/3.5 Instruct、Vision、MoE 三大系列的定位与能力通过 Microsoft Foundry Models、NVIDIA NIM 等云端 API 与 Hugging Face Transformers、Ollama、Foundry Local、ONNX Runtime for GenAI 等本地途径完成推理的完整实操。四个配套 Notebookphi35-instruct-demo.ipynb、phi35-vision-demo.ipynb、phi35_moe_demo.ipynb、Phi-3-Vision-Nividia-NIM.ipynb均位于 19-slm/python 目录下可直接在支持 Jupyter 的环境如 AzureML、VS Code Polyglot Notebook中运行复现。若想进一步了解 SLM 的更多细节可结合本仓库其他课程如 16-open-source-models/README.md 关于开源模型选型的讨论延伸阅读并参考官方 Phi-3 Cookbook 获取更系统的示例。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表