ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

小语言模型(SLM)入门实战:基于 Microsoft Phi-3/3.5 家族从文本、视觉到 MoE 的推理指南

小语言模型(SLM)入门实战:基于 Microsoft Phi-3/3.5 家族从文本、视觉到 MoE 的推理指南 小语言模型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本指南以《生成式 AI 初学者教程》第 19 课为主线系统讲解小语言模型Small Language Model, SLM的核心概念、与大型语言模型LLM的关键差异并以 Microsoft Phi-3/3.5 家族为实例带你走通云端 API 与本地运行两条推理路径。学完本文你将能够准确描述 SLM 的定位、区分 LLM 与 SLM 的五个维度并借助仓库配套 Notebook 独立完成 Instruct文本、Vision视觉与 MoE混合专家三类模型的推理调用。什么是小语言模型SLM小语言模型SLM是大型语言模型LLM的缩小版变体它继承了 LLM 的绝大部分架构原理与技术手段但计算足迹computational footprint显著降低。SLM 是专门用于生成类人文本的语言模型子集与 GPT-4 这样的大模型相比更加紧凑、高效非常适合计算资源受限的场景尽管体积小它依然能胜任多种自然语言处理NLP任务文本生成生成连贯且符合上下文的句子或段落文本补全基于给定提示词预测并补全句子翻译把文本从一种语言转换到另一种语言摘要把长文本压缩成更短、更易读的摘要。SLM 通常通过对 LLM 进行压缩或蒸馏distill构建目标是保留原模型相当一部分功能与语言能力。模型尺寸的缩减降低了整体复杂度使 SLM 在内存占用与算力需求两方面都更高效当然与更大的模型相比它在部分性能或理解深度上会有所取舍。SLM 如何工作从训练到微调SLM 基于海量文本数据训练而成在训练过程中学习语言的模式与结构从而生成语法正确、上下文恰当的文本。训练流程包含四个典型阶段数据收集从各种来源收集大规模文本数据集预处理清洗并整理数据使其适合训练训练使用机器学习算法让模型学会理解与生成文本微调针对特定任务调整模型提升其在目标任务上的表现。SLM 的发展与移动设备、边缘计算平台等资源受限环境对可部署模型的需求增长相吻合。在完整版 LLM 因资源消耗过重而难以落地的场景中以效率为核心的 SLM 在性能与可及性之间取得了平衡从而被广泛部署于各类领域。SLM 的典型应用场景聊天机器人提供客户支持并以对话方式与用户交互内容创作帮助写作者生成创意甚至起草整篇文章教育辅助学生完成写作作业或学习新语言无障碍为残障人士开发工具如文本转语音系统。LLM 与 SLM 的关键区别五个维度LLM 与 SLM 都建立在概率机器学习的基本原理之上架构设计、训练方法、数据生成过程与模型评估手段也大同小异但以下五个关键因素将两类模型区分开来。模型规模Size规模是 LLM 与 SLM 最显著的差异。例如 ChatGPTGPT-4参数量估计高达约 1.76 万亿而开源 SLM 如 Mistral 7B 仅有约 70 亿参数。这种悬殊主要源于模型架构与训练过程的差异ChatGPT 在编码器-解码器encoder-decoder框架内使用自注意力机制而 Mistral 7B 在纯解码器decoder-only模型中使用滑动窗口注意力sliding window attention使训练更高效。架构差异深刻影响模型的复杂度与性能。理解能力ComprehensionSLM 通常针对特定领域进行性能优化高度专业化但在跨多个知识领域的广泛上下文理解上可能受限LLM 则试图在更全面的层面模拟人类智能在海量多样数据集上训练跨领域表现优异通用性与适应性更强因此更适合自然语言处理、编程等更广泛的下游任务。计算资源ComputingLLM 的训练与部署是资源密集型工作通常需要大规模 GPU 集群等重型基础设施——例如从头训练 ChatGPT 级别的模型可能需要数千张 GPU 并持续很长时间。相比之下参数量更小的 SLM 对算力的门槛低得多像 Mistral 7B 这样的模型可在配备中等 GPU 的本地机器上训练与运行尽管训练仍需多张 GPU、耗时数小时。偏见Bias偏见是 LLM 中的常见问题主要源于训练数据这些模型大量使用互联网上原始公开数据可能导致某些群体被低估或误述、标签错误以及由方言、地域差异和语法规则引发的语言偏见。LLM 架构的复杂性还可能无意中放大偏见若不仔细微调很难察觉。SLM 使用更受约束的领域专用数据集训练对这些偏见相对不那么敏感但并非完全免疫。推理Inference体积缩小为 SLM 带来显著的推理速度优势它在本地硬件上即可高效产出结果无需大规模并行处理。而 LLM 由于体量与复杂度往往需要大量并行计算资源才能获得可接受的推理时间当并发用户较多时LLM 的响应速度尤其会在大规模部署场景下变慢。小结维度LLM如 GPT-4SLM如 Mistral 7B、Phi-3-mini模型规模高达万亿级参数数十亿级参数理解能力跨领域通用、适应性强领域专精、泛化有限计算资源需大规模 GPU 集群中等 GPU 本地可运行偏见易受公开数据偏见影响相对不敏感但非免疫推理速度需并行计算高并发下降速本地高效推理、响应快简而言之LLM 通用但资源消耗大SLM 以领域专精效率与更低的计算需求见长。本课程以Microsoft Phi-3 / 3.5为实例来介绍 SLM。Microsoft Phi-3 / Phi-3.5 家族概览Phi-3 / 3.5 家族主要覆盖三类应用场景文本Instruct、视觉Vision与智能体/MoEMixture of Experts。与 LLM 不同Phi-3/3.5-mini 或 Phi-3/3.5-Vision 可以部署到边缘设备上。Phi-3 / 3.5 Instruct文本场景Instruct 系列主要用于文本生成、聊天补全、内容信息抽取等任务。Phi-3-mini3.8B 参数的语言模型可在 Microsoft Azure AI Studio、Hugging Face、Ollama 等平台获取。据课程文档记载Phi-3 模型在关键基准测试上显著优于同等或更大尺寸的模型Phi-3-mini 甚至超过两倍于自身规模的模型。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 多种语言阿拉伯语、中文、捷克语、丹麦语、荷兰语、英语、芬兰语、法语、德语、希伯来语、匈牙利语、意大利语、日语、韩语、挪威语、波兰语、葡萄牙语、俄语、西班牙语、瑞典语、泰语、土耳其语、乌克兰语等并强化了长上下文支持。3.8B 的 Phi-3.5-mini 在同类模型中表现突出可媲美两倍规模的模型。Phi-3 / 3.5 Vision视觉场景如果把 Instruct 模型比作 Phi 的“理解能力”那么 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 ExpertsMoE允许模型用远少得多的算力完成预训练意味着在相同计算预算下可以大幅扩展模型或数据集规模——MoE 模型应在预训练中比同质量稠密dense模型快得多。Phi-3.5-MoE 由 16 个 3.8B 专家模块expert modules组成仅有 6.6B 激活参数却能达到与规模大得多的模型相近的推理、语言理解与数学能力。仓库中的配套 Notebook phi35_moe_demo.ipynb 加载模型后打印出的结构正好印证了上述架构描述PhiMoEForCausalLM由 32 层PhiMoEDecoderLayer组成其中稀疏专家块PhiMoESparseMoeBlock含一个输出维度为 16 的gate门控网络以及 16 个PhiMoEBlockSparseTop2MLP专家Top-2 路由、每 token 激活两个专家词表大小为 32064——即每个解码层都有一组共享门控与 16 个专家供路由选择。云端 API 推理三种接入方式GitHub ModelsGitHub Models 是最直接的接入方式可快速访问 Phi-3/3.5-Instruct 模型。结合 Azure AI Inference SDK 或 OpenAI SDK可以通过代码访问 API 完成 Phi-3/3.5-Instruct 调用也可以在 Playground 中先行测试不同效果。课程文档附带一个中文场景对比演示在 Playground 中分别选择 Phi-3-mini 与 Phi-3.5-mini对同一中文提问查看两者的回答质量差异。Azure AI Studio如果需要调用视觉Vision与 MoE 模型可以通过 Azure AI Studio 完成。可参考 Phi-3 Cookbook 中关于在 Azure AI Studio 上调用 Phi-3/3.5 Instruct、Vision、MoE 的快速上手章节具体操作步骤见 Phi-3 Cookbook 文档。NVIDIA NIM除云端模型目录方案外还可以通过 NVIDIA NIMNVIDIA Inference Microservices完成相关调用。NIM 是一组加速推理微服务旨在帮助开发者在云、数据中心、工作站等多样环境中高效部署 AI 模型。其关键特性包括部署简便一条命令即可部署 AI 模型轻松集成到现有工作流性能优化利用 NVIDIA 预优化的推理引擎如 TensorRT、TensorRT-LLM保证低延迟与高吞吐可扩展性在 Kubernetes 上支持自动扩缩容有效应对波动的工作负载安全与控制组织可在自管基础设施上自托管 NIM 微服务保持对数据与应用的控制标准 API提供行业标准 API便于构建聊天机器人、AI 助手等 AI 应用。NIM 是 NVIDIA AI Enterprise 的组成部分旨在简化 AI 模型的部署与运维确保其在 NVIDIA GPU 上高效运行。仓库配套 Notebook Phi-3-Vision-Nividia-NIM.ipynb 展示了通过 NIM 的 OpenAI 兼容接口调用 Phi-3 视觉模型的完整流程将图片 base64 编码后嵌入消息、携带 Bearer 令牌发起请求、解析返回内容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() assert len(image_b64) 180_000, \ To upload larger images, use the assets API (see docs) stream False headers { Authorization: Bearer Your Nvidia NIM API Key, Accept: text/event-stream if stream else application/json } payload { messages: [ { role: user, content: fPlease create Python code for image, and use plt to save the new picture under imgs/ and name it phi-3-vision.jpg. img srcdata:image/png;base64,{image_b64} / } ], max_tokens: 1024, temperature: 0.6, top_p: 1.0, stream: stream } response requests.post(invoke_url, headersheaders, jsonpayload) if stream: for line in response.iter_lines(): if line: print(line.decode(utf-8)) else: print(response.json())注意图片以img srcdata:image/png;base64,... /的形式嵌入 user 消息内容max_tokens、temperature、top_p等生成参数与标准 Chat Completions 接口一致。本地运行 Phi-3/3.5所谓推理inference指的是语言模型根据收到的输入生成响应或预测的过程向 Phi-3 提供提示词或问题后它利用训练好的神经网络分析数据中的模式与关系推断出最恰当、最相关的回答。以下介绍三种本地运行方案。Hugging Face TransformersHugging Face Transformers 是为 NLP 及其他机器学习任务设计的强大库其核心特点包括预训练模型提供数千个可用于文本分类、命名实体识别、问答、摘要、翻译、文本生成等任务的预训练模型框架互操作支持 PyTorch、TensorFlow、JAX 等多个深度学习框架可在一种框架中训练、在另一种框架中使用多模态能力除 NLP 外还支持计算机视觉图像分类、目标检测与音频处理语音识别、音频分类任务易用性提供简便的模型下载与微调 API 和工具对初学者与专家都很友好社区与资源拥有活跃社区及丰富的文档、教程和指南。这是最常用的方式但需要 GPU 加速——Vision、MoE 等场景计算量很大若不量化在 CPU 上会非常慢。仓库提供了三个配套 Demo Notebook① Instruct 文本生成phi35-instruct-demo.ipynb 展示了加载本地模型、按 Phi-3 聊天模板组织消息并生成中文回答的完整链路import torch from transformers import AutoModelForCausalLM, AutoTokenizer, pipeline torch.random.manual_seed(0) model AutoModelForCausalLM.from_pretrained( ../phi-3-instruct, # 指向本地已下载的 Phi-3/3.5 模型目录 device_mapcuda, # 显式使用 GPU 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])② Vision 多帧推理phi35-vision-demo.ipynb 演示了 Phi-3.5-Vision 的多帧输入能力先用 OpenCV 基于直方图相似度阈值 0.9从视频中抽取关键帧再以|image_i|占位符组织多帧输入最后调用模型对“视频”进行摘要from PIL import Image from transformers import AutoModelForCausalLM, AutoProcessor # 1. 视频抽帧OpenCV 直方图相似度 0.9 时保留关键帧 # save_keyframes(../video/copilot.mp4, ../output) # 2. 读取多帧图片并构造占位符 images [] placeholder for i in range(1, 22): images.append(Image.open(f../output/keyframe_{i}.jpg)) placeholder f|image_{i}|\n # 3. 加载视觉模型与处理器 model_id ../Phi3Vision 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) # 4. 应用聊天模板并生成 messages [{role: user, content: placeholder Summarize the video.}] 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] print(response)关键点num_crops4控制图像切块数量影响视觉细节的编码粒度_attn_implementationflash_attention_2启用 FlashAttention 加速多帧推理正好对应文档所述“支持多帧输入”能力。③ MoE 智能体场景phi35_moe_demo.ipynb 展示了用 MoE 模型驱动“工具调用型智能体”系统消息要求模型始终以 JSON 格式输出tool_name、input、output字段从而实现写作、翻译等多步 Agent 流程from torch import bfloat16 import transformers model_id ../Phi3MOE model transformers.AutoModelForCausalLM.from_pretrained( model_id, trust_remote_codeTrue, torch_dtypebfloat16, # MoE 模型显式使用 bfloat16 加载 device_mapauto, ) tokenizer transformers.AutoTokenizer.from_pretrained(model_id) def instruction_format(sys_message: str, query: str): return f|system| {sys_message} |end|\n|user| {query} |end|\n|assistant| # sys_msg定义 Blog / Translate 两个工具要求模型以 JSON 格式规划多步调用 query Write something about Generative AI with MOE, translate it to Chinese input_prompt instruction_format(sys_msg, query) pipe transformers.pipeline(text-generation, modelmodel, tokenizertokenizer) 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])该 Notebook 运行时会加载 17 个 checkpoint 分片并给出部分参数被卸载到 CPU 的提示device_mapauto会自动做显存调度说明 MoE 模型虽然激活参数只有 6.6B但完整权重仍需可观显存。OllamaOllama 是一个让用户在本机轻松运行 LLM 的平台支持 Llama 3.1、Phi 3、Mistral、Gemma 2 等多种模型。它将模型权重、配置与数据打包成一个整体便于用户自定义和创建自己的模型支持 macOS、Linux、Windows适合想脱离云服务进行实验或部署的用户。使用方式最为直接只需一条命令ollama run phi3.5ONNX Runtime for GenAIONNX Runtime 是一个跨平台推理与训练的机器学习加速器支持 Open Neural Network ExchangeONNX格式的模型——这是表示机器学习模型的标准。ONNX Runtime 推理可带来更快的用户体验与更低的成本支持 PyTorch、TensorFlow/Keras 等深度学习框架以及 scikit-learn、LightGBM、XGBoost 等经典机器学习库的模型兼容不同硬件、驱动与操作系统并通过硬件加速器利用、图优化与变换提供最优性能。生成式 AI指基于训练数据生成文本、图像、音乐等新内容的 AI 系统例如 GPT-3 这类语言模型与 Stable Diffusion 这类图像生成模型。ONNX Runtime for GenAIGENAI扩展了 ONNX Runtime 的能力为 ONNX 模型提供完整的生成式 AI 循环包括 ONNX Runtime 推理、logits 处理、搜索与采样、KV 缓存管理等。其关键特性广泛的平台支持可运行于 Windows、Linux、macOS、Android、iOS 等平台模型支持支持 LLaMA、GPT-Neo、BLOOM 等流行生成式 AI 模型性能优化包含对 NVIDIA GPU、AMD GPU 等不同硬件加速器的优化易用性提供易于集成到应用的 API用最少代码生成文本、图像等内容用户可以调用高层generate()方法也可以逐 token 循环迭代模型并在循环中动态更新生成参数支持贪婪/波束搜索、TopP/TopK 采样内置重复惩罚等 logits 处理还可轻松添加自定义打分。快速开始# 安装 ONNX Runtime 本体 pip install onnxruntime # 安装生成式 AI 扩展 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)调用 Phi-3.5-Vision 的多模态示例使用create_multimodal_processor()创建多模态处理器并在 prompt 中以|image_1|占位图片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, 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)与高层generate()不同这里采用逐 token 循环方式通过GeneratorParams.set_search_options(max_length3072)设置最大生成长度适合对生成过程做细粒度控制。其他厂商的量化推理方案除 ONNX Runtime、Ollama 之外还可以基于各厂商提供的模型参考方式实现量化模型推理例如Apple MLX配合 Apple Metal 使用充分利用 Apple 芯片的 GPU/统一内存Qualcomm QNN利用 NPU 加速Intel OpenVINO利用 CPU/GPU 加速。更多内容可查阅 Phi-3 Cookbook。进一步学习仓库配套资源索引本文已覆盖 SLM 基础与 Phi-3/3.5 家族推理的核心内容若想深入可在本仓库中直接复用以下配套资源课程原文英文版19-slm/README.mdInstruct 文本推理19-slm/python/phi35-instruct-demo.ipynbVision 多帧推理19-slm/python/phi35-vision-demo.ipynbMoE 智能体推理19-slm/python/phi35_moe_demo.ipynbNVIDIA NIM 视觉调用19-slm/python/Phi-3-Vision-Nividia-NIM.ipynb这些 Notebook 均采用真实可运行的调用方式模型路径为占位符需按你的本地目录替换。结合模型家族图Instruct / Vision / MoE 的参数与规模对照与云端 Playground 实测截图你可以把从“SLM 是什么”到“Phi-3/3.5 怎么用”的知识闭环完整走通。若想进一步学习 SLM 的更多细节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),仅供参考
返回列表