与 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 课19-slm/README.md展开系统讲解小语言模型Small Language Model, SLM的定义、训练原理、与大语言模型LLM的五大差异以及 Microsoft Phi-3/3.5 家族Instruct / Vision / MoE 三条产品线在云端 API 与本地环境Hugging Face Transformers、Ollama、ONNX Runtime GenAI下的完整推理方案。读完本文你可以独立完成 Phi-3/3.5 系列的本地部署与多模态推理调用并理解各技术栈的适用边界。什么是小语言模型SLM小语言模型SLM是大语言模型LLM的“缩小版”它沿用了 LLM 的大部分架构原则与训练技术但计算足迹显著更小。SLM 是语言模型的一个子集目标是生成类人文本。与 GPT-4 这类大型模型相比SLM 更紧凑、更高效因此特别适合计算资源受限的应用场景。从构建方式看SLM 通常由 LLM **压缩compression或蒸馏distillation**而来旨在保留原始模型大部分的功能与语言能力。模型体积的缩减降低了整体复杂度使 SLM 在内存占用和算力需求两方面都更高效。尽管经过优化SLM 依然能承担多种自然语言处理NLP任务文本生成Text Generation生成连贯、上下文相关的句子或段落文本补全Text Completion基于给定提示预测并补全句子翻译Translation将文本从一种语言转换为另一种语言摘要Summarization把长文本压缩为更易消化的摘要。当然与更大的模型相比SLM 在性能上限或理解深度上存在一定折损trade-off这是选型时必须权衡的代价。小语言模型是如何工作的训练流程SLM 在海量文本数据上训练。训练过程中模型学习语言的模式与结构从而能够生成既语法正确、又上下文贴切的文本。完整的训练流程包含四个阶段数据收集Data Collection从多种来源汇集大规模文本数据集预处理Preprocessing清洗并整理数据使其适合训练训练Training使用机器学习算法教会模型理解和生成文本微调Fine-Tuning针对特定任务调整模型提升其在具体任务上的表现。SLM 的发展路线与一个现实需求高度一致越来越多的场景如移动设备、边缘计算平台需要在资源受限的环境中部署模型而全尺寸 LLM 由于资源开销巨大往往“装不下、跑不动”。通过聚焦效率SLM 在性能与可及性之间取得平衡从而能够在更多领域落地。学习目标本课将 SLM 的理论知识与 Microsoft Phi-3 家族相结合覆盖文本、视觉与 MoE专家混合三类应用场景。学完后应能回答以下问题什么是 SLMSLM 与 LLM 有什么区别什么是 Microsoft Phi-3/3.5 家族如何用 Microsoft Phi-3/3.5 家族完成推理LLM 与 SLM 的核心差异两者都建立在概率机器学习的相同基础之上在架构设计、训练方法、数据生成过程和模型评估技术上都遵循相似的路径。但在以下五个维度上两者存在显著差别。差异一尺寸Size最本质的区别在于模型规模。LLM 如 ChatGPTGPT-4据估计拥有约1.76 万亿1.76T个参数而开源 SLM 如 Mistral 7B 只有约70 亿7B参数。这种数量级差异主要来自架构与训练流程的不同ChatGPT 采用 encoder-decoder 框架中的自注意力self-attention机制而 Mistral 7B 使用滑窗注意力sliding window attention在 decoder-only 架构中实现更高效的训练。架构差异会深刻影响模型的复杂度与性能表现。差异二理解能力ComprehensionSLM 通常针对特定领域优化高度专业化但在跨领域的广泛上下文理解上可能受限。LLM 则追求在更全面的层面模拟类人智能它们在庞大且多样化的数据集上训练设计上就要在多个领域表现良好具备更强的通用性与适应力。因此LLM 更适合覆盖自然语言处理、编程等更广范围的下游任务。差异三算力ComputingLLM 的训练与部署是资源密集型过程通常需要大规模 GPU 集群——从零训练一个 ChatGPT 级别的模型可能需要数千张 GPU 运行很长时间。相比之下SLM 凭借更少的参数对算力资源的要求低得多Mistral 7B 这类模型可以在配备中等 GPU 的本地机器上训练和运行尽管训练仍需多张 GPU 协作数小时。差异四偏见Bias偏见是 LLM 的已知问题根源主要在训练数据LLM 常基于网络上抓取的生数据训练这些数据可能低估或歪曲某些群体、引入错误标注或反映受方言、地域和语法规则影响的语言偏见。此外LLM 复杂的架构可能在无精细微调的情况下无意中放大偏见。相反SLM 基于更有约束、更领域化的数据集训练天生对此类偏见的敏感度更低——但并非完全免疫。差异五推理速度Inference体积更小赋予 SLM 显著的推理速度优势它们可以在本地硬件上高效生成输出无需大规模并行处理。LLM 因体积与复杂度往往需要大量并行计算资源才能达到可接受的推理时延当大量并发用户同时使用时响应时间会进一步恶化规模化部署时尤为明显。小结LLM 与 SLM 共享机器学习基础但在模型尺寸、资源需求、上下文理解能力、偏见倾向和推理速度上差异显著。LLM 更通用但资源消耗大SLM 以更低的算力要求提供领域特化的效率。小语言模型的典型应用SLM 的应用场景广泛主要包括聊天机器人提供客户支持以对话方式与用户互动内容创作辅助作者生成创意甚至起草整篇文章教育帮助学生完成写作作业或学习新语言无障碍Accessibility为残障人士创建工具如文本转语音TTS系统。注本课以 Microsoft Phi-3 / 3.5 为例来介绍 SLM。认识 Phi-3 / Phi-3.5 家族Phi-3 / 3.5 家族主要面向**文本Instruct、视觉Vision与智能体Agent, MoE**三类应用场景。Phi-3 / 3.5 Instruct 系列Instruct 系列主要用于文本生成、对话补全与内容信息抽取等场景。Phi-3-mini3.8B3.8B 参数的语言模型可在 Microsoft Azure AI Studios、Hugging Face 与 Ollama 上获取。Phi-3 系列在关键基准测试上显著超越同等或更大规模的语言模型基准数值越大越好。Phi-3-mini 的表现超过了体积为其两倍的模型Phi-3-small 与 Phi-3-medium 则超过了包括 GPT-3.5 在内的更大模型。Phi-3-small Phi-3-medium仅 7B 参数的 Phi-3-small 就在多种语言、推理、编码与数学基准上超越了 GPT-3.5T。14B 参数的 Phi-3-medium 延续这一趋势超越了 Gemini 1.0 Pro。Phi-3.5-mini3.8B可视为 Phi-3-mini 的升级参数规模不变但多语言支持能力增强支持 20 种以上语言阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语并加入了更强的长上下文支持。Phi-3.5-mini 以 3.8B 参数超越同尺寸语言模型表现与比它大 1.52 倍的模型相当。Phi-3 / 3.5 Vision 系列可以这样理解Instruct 模型是 Phi 的“理解力”而 Vision 则赋予了 Phi 认识世界的“眼睛”。Phi-3-Vision4.2B仅 4.2B 参数却在通用视觉推理、OCR 以及表格与图表理解任务上超越了 Claude-3 Haiku 与 Gemini 1.0 Pro V 等更大的模型。Phi-3.5-VisionPhi-3.5-Vision 是 Phi-3-Vision 的升级新增多图片多帧输入支持——不只是“看”单张图片还能对多帧内容进行推理即初步的“看视频”能力。它在 OCR、表格与图表理解任务上超越 Claude-3.5 Sonnet 与 Gemini 1.5 Flash并在通用视觉知识推理任务上与之持平。Phi-3.5-MoE专家混合**专家混合Mixture of Experts, MoE**让模型可以用少得多的计算量完成预训练——也就是说在相同的算力预算下MoE 模型可以把模型或数据规模放大到稠密dense模型难以企及的程度。具体而言MoE 模型在预训练阶段就能比其稠密对应版本更快地达到同等质量。Phi-3.5-MoE 由16 个 3.8B 专家模块组成虽然激活参数仅 6.6B却能在推理、语言理解与数学能力上达到与远大于它的模型相当的水平。得益于上述紧凑设计与 LLM 不同Phi-3/3.5-mini 或 Phi-3/3.5-Vision 可以部署在边缘设备上。云端 API 推理三条接入路径以下按课程文档给出的路径介绍通过云端 API 调用 Phi-3/3.5 的方式。路径一GitHub ModelsGitHub Models 是最直接的途径可以直接访问 Phi-3/3.5-Instruct 模型配合 Azure AI Inference SDK / OpenAI SDK 通过代码发起 API 调用也可以直接通过 Playground 在线体验不同模型的效果。课程文档附带了一个对比 Demo在中文场景下比较 Phi-3-mini 与 Phi-3.5-mini 的输出差异直观展示多语言与长上下文升级带来的效果提升路径二Azure AI Studio若需要使用 Vision 与 MoE 模型可以借助 Azure AI Studio 完成调用。课程文档建议参考 Phi-3 Cookbook 的 QuickStart 指南学习如何通过 Azure AI Studio 调用 Phi-3/3.5 的 Instruct、Vision 与 MoE 模型。路径三NVIDIA NIM除 Azure 与 GitHub 提供的云模型目录外还可以使用 **NVIDIA NIMNVIDIA Inference MicroservicesNVIDIA 推理微服务**完成 Phi-3/3.5 家族的 API 调用。NIM 是一套加速推理微服务帮助开发者在云端、数据中心与工作站等多种环境中高效部署 AI 模型。其核心特性包括部署简便单条命令即可部署 AI 模型便于融入现有工作流性能优化内置 TensorRT、TensorRT-LLM 等 NVIDIA 预优化推理引擎保障低时延与高吞吐可扩展性支持 Kubernetes 自动扩缩容从容应对波动的负载安全可控组织可以把 NIM 微服务托管在自己的基础设施上保持对数据与应用的控制标准 API提供行业标准 API构建聊天机器人、AI 助手等应用十分容易。NIM 属于 NVIDIA AI Enterprise 的一部分目标是简化 AI 模型的部署与运维确保其在 NVIDIA GPU 上高效运行。仓库中的真实 Demo19-slm/python/Phi-3-Vision-Nividia-NIM.ipynb 展示了完整的调用链可作为源码级参考import requests, base64 invoke_url https://ai.api.nvidia.com/v1/vlm/microsoft/phi-3-vision-128k-instruct with open(./img/demo.png, rb) as f: image_b64 base64.b64encode(f.read()).decode() # 上传前校验图片大小超过 180_000 字符需改用 assets API assert len(image_b64) 180_000, \ To upload larger images, use the assets API (see docs) headers { Authorization: Bearer Your Nvidia NIM API Key, Accept: application/json } payload { messages: [ { role: user, content: fPlease create Python code for image ... 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) code response.json()[choices][0][message][content]从该 Notebook 的源码结构看NIM 端点采用与 OpenAI 兼容的messages结构图片以data:image/png;base64内联进用户消息生成参数max_tokens、temperature、top_p与 OpenAI 风格一致这意味着现有的 OpenAI SDK 代码只需替换 endpoint 与密钥即可迁移。本地运行 Phi-3/3.5对 Phi-3或 GPT-3 等任何语言模型而言“推理inference”指的是基于输入生成响应或预测的过程当向 Phi-3 提供提示或问题时它会利用训练好的神经网络通过分析训练数据中的模式与关联推断出最可能且最相关的回答。本地推理有三条主流路径外加一个跨平台引擎方案。方案一Hugging Face TransformersHugging Face Transformers 是面向 NLP 及其他机器学习任务的强大库其关键特性预训练模型库提供数千个预训练模型覆盖文本分类、命名实体识别、问答、摘要、翻译与文本生成等任务框架互操作支持 PyTorch、TensorFlow、JAX 等多个深度学习框架模型可在一个框架训练、在另一个框架使用多模态能力除 NLP 外还支持计算机视觉图像分类、目标检测与音频处理语音识别、音频分类易用性提供下载与微调模型的 API 和工具新手与专家都能上手社区与资源拥有活跃社区、完善的文档、教程与学习指南。这是最常用的本地方法但需要 GPU 加速Vision 与 MoE 场景计算量大未量化时在 CPU 上会非常慢。仓库中的三个官方 Demo均可在 19-slm/python/ 目录找到Instruct 文本推理19-slm/python/phi35-instruct-demo.ipynbVision 视觉推理19-slm/python/phi35-vision-demo.ipynbMoE 智能体推理19-slm/python/phi35_moe_demo.ipynb1Instruct Demo 的源码解读phi35-instruct-demo 的核心调用链如下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 / user / 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])几个值得注意的实现细节device_mapcuda与torch_dtypeauto模型直接加载到 GPU 并自动选择精度这是 Phi-3 本地推理的标配写法trust_remote_codeTruePhi-3 依赖仓库内的自定义处理代码必须显式信任Phi-3 的对话模板为|system|...|end||user|...|end||assistant|即系统指令、用户输入与助手响应由特殊 token 分隔——手写 prompt 时必须严格遵循这一格式否则模型行为会不稳定生成参数中temperature0.3配合do_sampleFalse意味着实际走的是贪心解码路径输出更确定、可复现。2Vision Demo 的源码解读phi35-vision-demo 演示了 Phi-3.5-Vision 的多帧多图片输入能力from transformers import AutoModelForCausalLM, AutoProcessor model_id ../Phi3Vision model AutoModelForCausalLM.from_pretrained( model_id, device_mapcuda, trust_remote_codeTrue, torch_dtypeauto, _attn_implementationflash_attention_2) # 为每一帧构造 |image_i| 占位符 images [] placeholder for i in range(1, 22): images.append(Image.open(f../output/keyframe_{i}.jpg)) placeholder f|image_{i}|\\n messages [{role: user, content: placeholder Summarize the video.}] 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) generation_args {max_new_tokens: 1000, temperature: 0.0, do_sample: False} generate_ids model.generate(**inputs, eos_token_idprocessor.tokenizer.eos_token_id, **generation_args) generate_ids generate_ids[:, inputs[input_ids].shape[1]:] response processor.batch_decode(generate_ids, skip_special_tokensTrue, clean_up_tokenization_spacesFalse)[0]可以看到多帧推理的关键机制每张输入图片在 prompt 中对应一个|image_i|占位 tokenAutoProcessor负责把图片编码并与占位符对齐num_crops4控制每张图的多裁剪区域数量_attn_implementationflash_attention_2启用 FlashAttention 以降低显存占用、加速长序列注意力计算最后通过切片generate_ids[:, inputs[input_ids].shape[1]:]去掉输入部分只保留新生成的 token。Notebook 前半部分还提供了用 OpenCV 直方图相似度cv2.compareHist阈值 0.9从视频中抽取关键帧的辅助脚本正好与 Phi-3.5-Vision“对多帧进行推理”的官方能力相呼应。3MoE Demo 的源码解读phi35_moe_demo 展示了把 Phi-3.5-MoE 用作工具调用型智能体的方式from torch import bfloat16 import transformers model_id ../Phi3MOE model transformers.AutoModelForCausalLM.from_pretrained( model_id, trust_remote_codeTrue, torch_dtypebfloat16, device_mapauto) model.eval() tokenizer transformers.AutoTokenizer.from_pretrained(model_id) pipe transformers.pipeline(text-generation, modelmodel, tokenizertokenizer) # Phi-3.5 的对话格式化函数 def instruction_format(sys_message: str, query: str): return f|system| {sys_message} |end|\n|user| {query} |end|\n|assistant| query Write something about Generative AI with MOE, translate it to Chinese input_prompt instruction_format(sys_msg, query) generation_args { max_new_tokens: 512, return_full_text: False, temperature: 0.3, do_sample: False, } output pipe(input_prompt, **generation_args) print(output[0][generated_text])从源码结构看该 Demo 的 system prompt 明确要求模型以 JSON 形式输出tool_name/input键值对如{tool_name: Blog, input: ...}并规定最终结果按agentidstep1 / step2 / final分步组织——这正是 MoE 模型在课程中定位的 “Agent智能体” 场景。另外Notebook 中通过os.environ[PYTORCH_CUDA_ALLOC_CONF] expandable_segments:True调整显存分配策略以缓解 MoE 架构16 个专家模块带来的碎片化显存压力这是本地运行 MoE 模型时的实用调优技巧。方案二OllamaOllama 是一个让 LLM 在本地机器上更容易运行的平台支持 Llama 3.1、Phi 3、Mistral、Gemma 2 等多种模型。它把模型权重、配置与数据打包进单一安装包降低了自定义与创建模型的门槛提供 macOS、Linux 与 Windows 版本非常适合不想依赖云服务、只想本地实验 LLM 的用户。Ollama 是本地运行中最直接的方式只需执行一条命令ollama run phi3.5方案三ONNX Runtime GenAIONNX Runtime 是什么ONNX Runtime 是跨平台的机器学习推理与训练加速器也是支持高性能推理的开源项目。它支持 ONNXOpen Neural Network Exchange格式——这是机器学习模型表示的通用标准。其推理能力可带来更快的用户体验与更低的成本既支持来自 PyTorch、TensorFlow/Keras 等深度学习框架的模型也支持 scikit-learn、LightGBM、XGBoost 等经典机器学习库的模型。ONNX Runtime 兼容不同的硬件、驱动与操作系统在可用时利用硬件加速器并配合图优化与变换提供最优性能。什么是生成式 AI生成式 AI 指能够基于训练数据生成新内容文本、图像、音乐等的 AI 系统例如 GPT-3 这类语言模型与 Stable Diffusion 这类图像生成模型。ONNX Runtime GenAI 库为 ONNX 模型提供完整的生成式 AI 循环ONNX Runtime 推理、logits 处理、搜索与采样以及 KV 缓存KV cache管理。ONNX Runtime GenAI 的主要特性广泛的平台支持运行于 Windows、Linux、macOS、Android、iOS模型支持支持 LLaMA、GPT-Neo、BLOOM 等众多流行生成式模型性能优化针对 NVIDIA GPU、AMD GPU 等不同硬件加速器做了优化易用性提供便于集成的 API用极少代码即可生成文本、图像等内容用户既可调用高层generate()方法也可在循环中逐次迭代、每次生成一个 token并可在循环内动态更新生成参数支持贪心/束搜索greedy/beam search与 TopP、TopK 采样来生成 token 序列内置重复惩罚等 logits 处理也方便加入自定义打分逻辑。快速上手安装 ONNX Runtime 与生成式 AI 扩展pip install onnxruntime pip install onnxruntime-genai一个最简单的 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 的完整 Demo对应课程文档中的多模态流式推理示例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 # Phi-3 Vision 的对话模板user / image_1 / assistant 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) # 逐 token 流式生成循环 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)这段代码体现了 ONNX Runtime GenAI 的核心编程模型og.Model加载 ONNX 权重create_multimodal_processor处理图文输入GeneratorParams设置输入与搜索选项如max_length3072Generator以is_done → compute_logits → generate_next_token的循环逐 token 产出结果适合需要流式输出的应用。其他本地方案除 ONNX Runtime 与 Ollama 之外还可以基于各厂商提供的模型引用方案完成量化模型的推理例如Apple MLX 框架配合 Apple MetalQualcomm QNNNPU 加速Intel OpenVINOCPU/GPU 加速。课程文档同时建议如需更深入的 Phi-3/3.5 使用技巧可参阅 Phi-3 Cookbook微软官方 SLM 实践手册获取更多内容。总结回到本课的四个学习目标本文已给出完整答案SLM 是什么由 LLM 压缩/蒸馏而来、计算足迹显著更小但仍能完成文本生成、补全、翻译、摘要等 NLP 任务的语言模型子集SLM 与 LLM 的区别集中在尺寸1.76T 级参数 vs 7B 级、领域理解深度、算力门槛、偏见倾向与推理速度五个维度本质是“通用性与效率”的取舍Phi-3/3.5 家族Instruct3.8B/7B/14B 三档文本模型、Vision4.2B 单图 → 多帧视频理解与 MoE16×3.8B 专家、6.6B 激活参数三条产品线均可部署到边缘设备如何推理云端走 GitHub Models / Azure AI Studio / NVIDIA NIM 三条 API 路径本地走 Hugging Face Transformers功能最全、需 GPU、Ollama一条命令最快与 ONNX Runtime GenAI跨平台、可精细控制生成循环三种方案仓库内 19-slm/python/ 提供了四个可运行的官方 Notebook 作为逐行参考。掌握以上内容后你已具备在资源受限环境下选型、部署并调用 SLM 的完整能力——这正是 Phi-3/3.5 这一代小模型相比 LLM 的最大实战价值。【免费下载链接】generative-ai-for-beginners21 Lessons, Get Started Building with Generative AI项目地址: https://gitcode.com/GitHub_Trending/ge/generative-ai-for-beginners创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考