From 0bde058455a2fd136b0e3c9daec8f46056adc8e8 Mon Sep 17 00:00:00 2001 From: ShawnSiao Date: Sun, 20 Apr 2025 00:13:46 +0800 Subject: [PATCH 1/2] translate readme.md in Chinese between chapter16 to chapter 21 --- .../translations/cn/README.md | 79 ++++ 17-ai-agents/translations/cn/README.md | 166 +++++++++ 18-fine-tuning/translations/cn/README.md | 91 +++++ 19-slm/translations/cn/README.md | 306 ++++++++++++++++ 20-mistral/translations/cn/README.md | 345 ++++++++++++++++++ 21-meta/translations/cn/README.md | 155 ++++++++ 6 files changed, 1142 insertions(+) diff --git a/16-open-source-models/translations/cn/README.md b/16-open-source-models/translations/cn/README.md index e69de29bb..b8dec9c7d 100644 --- a/16-open-source-models/translations/cn/README.md +++ b/16-open-source-models/translations/cn/README.md @@ -0,0 +1,79 @@ +[![开放原始码模型](../../images/16-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson16-gh?WT.mc_id=academic-105485-koreyst) + +## 简介 + +开放原始码 LLMs 的世界令人兴奋且不断演变。本课程旨在深入了解开放原始码模型。如果您正在寻找有关专有模型与开放原始码模型比较的信息,请参阅["探索和比较不同的 LLMs" 课程](../../../02-exploring-and-comparing-different-llms/translations/tw/README.md?WT.mc_id=academic-105485-koreyst)。本课程还将涵盖微调的主题,但更详细的解释可以在["微调 LLMs" 课程](../../../18-fine-tuning/translations/tw/README.md?WT.mc_id=academic-105485-koreyst)中找到。 + +## 学习目标 + +- 了解开放原始码模型 +- 了解使用开放原始码模型的好处 +- 探索 Hugging Face 和 Azure AI Studio 上可用的开放模型 + +## 什么是开放原始码模型? + +开放原始码软件在各个领域的技术发展中扮演了至关重要的角色。开放原始码倡议(OSI)已经定义了[软件的10个标准](https://web.archive.org/web/20241126001143/https://opensource.org/osd?WT.mc_id=academic-105485-koreyst),以将其归类为开放原始码。源程序必须在OSI批准的许可下公开共享。 + +虽然 LLMs 的开发与软件开发有相似的元素,但过程并不完全相同。这在社区中引发了许多关于 LLMs 背景下开放原始码定义的讨论。要使模型符合传统的开放原始码定义,以下信息应该公开可用: + +- 用于训练模型的数据集。 +- 作为训练的一部分的完整模型权重。 +- 评估代码。 +- 微调代码。 +- 完整模型权重和训练指标。 + +目前只有少数模型符合此标准。[由Allen Institute for Artificial Intelligence (AllenAI) 创建的OLMo模型](https://huggingface.co/allenai/OLMo-7B?WT.mc_id=academic-105485-koreyst) 就是其中之一。 + +在本课程中,我们将这些模型称为「开放模型」,因为在撰写时它们可能不符合上述标准。 + +## 开放模型的好处 + +**高度可定制** - 由于开放模型发布时附有详细的训练信息,研究人员和开发人员可以修改模型的内部结构。这使得能够建立即高度专门化的模型,针对特定任务或研究领域进行微调。一些范例包括程序生成器、数学运算和生物学。 + +**成本** - 使用和部署这些模型的每个 token 成本低于专有模型。在构建生成式 AI 应用程序时,应该在您的使用案例中考量这些模型的性能与价格。 + +![Model Cost](../../images/model-price.png?WT.mc_id=academic-105485-koreyst) +来源: 人工分析 + +**灵活性** - 使用开放模型使您在使用不同模型或结合它们方面更加灵活。一个范例是 [HuggingChat Assistants](https://huggingface.co/chat?WT.mc_id=academic-105485-koreyst),用户可以直接在用户界面中选择所使用的模型: + +![选择模型](../../images/choose-model.png?WT.mc_id=academic-105485-koreyst) + +## 探索不同的开放模型 + +### Llama 2 + +[LLama2](https://huggingface.co/meta-llama?WT.mc_id=academic-105485-koreyst), 由 Meta 开发,是一个针对聊天应用程序优化的开放模型。这是由于其微调方法,包括大量的对话和人类反馈。通过这种方法,模型产生更多符合人类期望的结果,从而提供更好的用户体验。 + +一些经过微调的Llama版本范例包括专门用于日语的[Japanese Llama](https://huggingface.co/elyza/ELYZA-japanese-Llama-2-7b?WT.mc_id=academic-105485-koreyst)和增强版基础模型的[Llama Pro](https://huggingface.co/TencentARC/LLaMA-Pro-8B?WT.mc_id=academic-105485-koreyst)。 + +### Mistral + +[Mistral](https://huggingface.co/mistralai?WT.mc_id=academic-105485-koreyst)是一个专注于高性能和效率的开放模型。它使用专家混合方法,将一组专门的专家模型组合成一个系统,根据输入选择特定的模型来使用。这使得计算更加有效,因为模型只处理它们专门的输入。 + +一些微调版本的Mistral范例包括专注于医疗领域的[BioMistral](https://huggingface.co/BioMistral/BioMistral-7B?text=Mon+nom+est+Thomas+et+mon+principal?WT.mc_id=academic-105485-koreyst)和进行数学计算的[OpenMath Mistral](https://huggingface.co/nvidia/OpenMath-Mistral-7B-v0.1-hf?WT.mc_id=academic-105485-koreyst)。 + +### Falcon + +[Falcon](https://huggingface.co/tiiuae?WT.mc_id=academic-105485-koreyst) 是由技术创新研究所(**TII**)创建的 LLM。Falcon-40B 在 400 亿个参数上进行了训练,已显示出在较少计算预算下比 GPT-3 表现更好。这是由于其使用了 FlashAttention 算法和多查询注意力,使其能够在推理时减少内存需求。由于这种减少的推理时间,Falcon-40B 适用于聊天应用程序。 + +一些 Falcon 微调版本的范例包括 [OpenAssistant](https://huggingface.co/OpenAssistant/falcon-40b-sft-top1-560?WT.mc_id=academic-105485-koreyst),一个基于开放模型的助手和 [GPT4ALL](https://huggingface.co/nomic-ai/gpt4all-falcon?WT.mc_id=academic-105485-koreyst),其性能高于基础模型。 + +## 如何选择 + +选择开放模型没有唯一的答案。一个好的开始是使用 Azure AI Studio 的任务筛选功能。这将帮助你了解模型已经被训练用于哪些类型的任务。Hugging Face 也维护了一个 LLM 排行榜,显示基于某些指标的最佳表现模型。 + +在比较不同类型的LLM时,[Artificial Analysis](https://artificialanalysis.ai/?WT.mc_id=academic-105485-koreyst) 是另一个很好的资源: + +![模型质量](../../images/model-quality.png?WT.mc_id=academic-105485-koreyst) +来源: 人工分析 + +如果处理特定用例,搜索专注于相同领域的微调版本可能会很有效。尝试多个开放模型,看看它们如何根据你和你的用户的期望表现,也是另一个好做法。 + +## 下一步 + +开放模型最棒的部分是你可以很快地开始使用它们。查看 [Azure AI Studio Model Catalog](https://ai.azure.com?WT.mc_id=academic-105485-koreyst),其中包含我们在此讨论的特定 Hugging Face 集合。 + +## 学习不止于此,继续旅程 + +完成本课程后,请查看我们的[生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)以继续提升您的生成式 AI 知识! diff --git a/17-ai-agents/translations/cn/README.md b/17-ai-agents/translations/cn/README.md index e69de29bb..2a32f5000 100644 --- a/17-ai-agents/translations/cn/README.md +++ b/17-ai-agents/translations/cn/README.md @@ -0,0 +1,166 @@ +[![开放源码模型](../../images/17-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson17-gh?WT.mc_id=academic-105485-koreyst) + +## 简介 + +AI 智能体代表了生成式AI的一个令人兴奋的发展,使大型语言模型(LLMs)从助手演变为能够采取行动的智能体。AI 智能体框架使开发者能够建立应用程序,让LLMs能够访问工具和状态管理。这些框架还增强了可见性,使用户和开发者能够监控LLMs计划的行动,从而改善体验管理。 + +这节课将涵盖以下领域: + +- 理解什么是 AI Agent - AI Agent 到底是什么? +- 探索四种不同的 AI Agent 框架 - 它们有什么独特之处? +- 将这些 AI Agent 应用于不同的使用案例 - 我们应该何时使用 AI Agent? + +## 学习目标 + +完成这节课后,你将能够: + +- 解释什么是 AI 智能体以及它们如何使用。 +- 了解一些流行的 AI 智能体框架之间的差异,以及它们的不同之处。 +- 了解 AI 智能体如何运作,以便使用它们构建应用程序。 + +## 什么是 AI 智能体? + +AI 智能体是一个在生成式AI世界中非常令人兴奋的领域。随着这种兴奋,有时会出现术语和其应用的混淆。为了保持简单并包含大多数提到AI 智能体的工具,我们将使用这一定义: + +AI Agents 允许大型语言模型(LLMs)通过提供**状态**和**工具**来执行任务。 + +![智能体模型](../../images/what-agent.png?WT.mc_id=academic-105485-koreyst) + +让我们定义这些术语: + +**大型语言模型** - 这些是本课程中提到的模型,例如 GPT-3.5、GPT-4、Llama-2 等。 + +**状态** - 这指的是LLM正在工作的上下文。LLM使用其过去行动的上下文和当前上下文,指导其后续行动的决策。AI 智能体框架允许开发人员更容易地维护此上下文。 + +**工具** - 为了完成用户请求的任务以及 LLM 所规划的任务,LLM 需要访问工具。一些工具的例子可以是数据库、API、外部应用程序甚至是另一个 LLM! + +这些定义希望能在我们了解它们如何实现时,为你打下良好的基础。让我们来探索几个不同的 AI Agent 框架: + +## LangChain Agents + +[LangChain Agents](https://python.langchain.com/docs/how_to/#agents?WT.mc_id=academic-105485-koreyst) 是我们上述定义的实现。 + +要管理**状态**,它使用一个名为 `AgentExecutor` 的内置函数。这个函数接受定义的 `agent` 和可用的 `tools`。 + +`Agent Executor` 也存储聊天记录以提供聊天的上下文。 + +![Langchain Agents](../../images/langchain-agents.png?WT.mc_id=academic-105485-koreyst) + +LangChain 提供一个[工具目录](https://integrations.langchain.com/tools?WT.mc_id=academic-105485-koreyst),可以导入到您的应用程序中,LLM 可以访问这些工具。这些工具由社区和 LangChain 团队制作。 + +然后你可以定义这些工具并将它们传递给 `Agent Executor`。 + +可见性是讨论 AI 智能体时另一个重要方面。应用程序开发人员需要了解 LLM 使用的是哪种工具以及为什么。为此,LangChain 团队开发了 LangSmith。 + +## AutoGen + +下一个我们将讨论的 AI Agent 框架是 [AutoGen](https://microsoft.github.io/autogen/?WT.mc_id=academic-105485-koreyst)。AutoGen 的主要焦点是对话。Agents 既是**可对话的**也是**可定制的**。 + +**Conversable -** LLMs 可以启动并继续与另一个 LLM 的对话以完成任务。这是通过建立 `AssistantAgents` 并给予它们特定的系统消息来完成的。 + +```python +autogen.AssistantAgent( name="Coder", llm_config=llm_config, ) +pm = autogen.AssistantAgent( + name="Product_manager", + system_message="Creative in software product ideas.", + llm_config=llm_config, +) +``` + +**可自订** - Agent 不仅可以定义为 LLMs,也可以是用户或工具。作为开发者,你可以定义一个 `UserProxyAgent`,负责与用户互动以获取完成任务的反馈。这些反馈可以继续执行任务或停止它。 + +```python +user_proxy = UserProxyAgent(name="user_proxy") +``` + +### 状态和工具 + +为了改变和管理状态,助手智能体生成 Python 代码来完成任务。 + +这里是一个过程的示例: + +![AutoGen](../../images/autogen.png?WT.mc_id=academic-105485-koreyst) + +#### 定义 LLM 的系统消息 + +```python +system_message="对于天气相关的任务,只使用提供给你的函数。任务完成后回复 TERMINATE。" +``` + +此系统信息指导此特定 LLM 哪些函数与其任务相关。请记住,使用 AutoGen 时,您可以有多个具有不同系统信息的 AssistantAgents。 + +#### 聊天由用户发起 + +```python +user_proxy.initiate_chat( chatbot, message="我计划下周去纽约旅行,你能帮我选择穿什么吗?", ) +``` + +此消息来自 user_proxy (人类) 是启动智能体探索应执行的可能函数的过程。 + +#### 函数被执行 + +```bash +聊天机器人 (to user_proxy): + +***** 建议的工具调用: get_weather ***** 参数: {"location":"New York City, NY","time_periond:"7","temperature_unit":"Celsius"} ******************************************************** -------------------------------------------------------------------------------- + +>>>>>>>> 执行函数 get_weather... user_proxy (to 聊天机器人): ***** 调用函数 "get_weather" 的回应 ***** 112.22727272727272 EUR **************************************************************** + +``` + +一旦初始聊天处理完成,智能体将发送建议的工具来调用。在这种情况下,它是一个名为 `get_weather` 的函数。根据您的配置,这个函数可以由智能体自动执行和读取,或者可以根据用户输入来执行。 + +你可以找到[AutoGen 代码示例](https://microsoft.github.io/autogen/docs/Examples/?WT.mc_id=academic-105485-koreyst)来进一步探索如何开始构建。 + +## Taskweaver + +接下来我们将探讨的智能体框架是 [Taskweaver](https://microsoft.github.io/TaskWeaver/?WT.mc_id=academic-105485-koreyst)。它被称为「代码优先」智能体,因为它不仅仅是严格地与 `strings` 一起工作,它还可以与 Python 中的 DataFrames 一起工作。这对于资料分析和生成任务变得非常有用。这可以是建立图表或生成随机数等事情。 + +### 状态和工具 + +为了管理对话的状态,TaskWeaver 使用了 `Planner` 的概念。`Planner` 是一个 LLM,它接收用户的请求并规划出需要完成的任务,以满足这些请求。 + +为了完成任务,`Planner` 会接触到称为 `Plugins` 的工具集合。这可以是 Python 类别或一般的代码解释器。这些插件被储存为嵌入,以便 LLM 能够更好地搜索正确的插件。 + +![Taskweaver](../../images/taskweaver.png?WT.mc_id=academic-105485-koreyst) + +这里是一个处理异常检测的插件示例: + +```python +class AnomalyDetectionPlugin(Plugin): + def __call__(self, df: pd.DataFrame, time_col_name: str, value_col_name: str): +``` + +代码在执行前会被验证。Taskweaver 中管理上下文的另一个功能是 `experience`。Experience 允许将对话的上下文长期存储在 YAML 文件中。这可以配置,使得 LLM 随着时间的推移在某些任务上有所改进,前提是它接触到先前的对话。 + +## JARVIS + +最后我们将探讨的智能体框架是 [JARVIS](https://github.com/microsoft/JARVIS?tab=readme-ov-file?WT.mc_id=academic-105485-koreyst)。JARVIS 的独特之处在于它使用 LLM 来管理对话的 `state`,而 `tools` 是其他 AI 模型。每个 AI 模型都是专门的模型,执行某些任务,例如物体检测、转录或图像标注。 + +![JARVIS](../../images/jarvis.png?WT.mc_id=academic-105485-koreyst) + +LLM 作为一个通用模型,接收来自用户的请求并识别特定任务及完成任务所需的任何参数/资料。 + +```python +[{"task": "物体-detection", "id": 0, "dep": [-1], "args": {"image": "e1.jpg" }}] +``` + +LLM 然后以专门的 AI 模型能够解释的方式格式化请求,例如 JSON。一旦 AI 模型根据任务返回其预测,LLM 便会接收回应。 + +如果需要多个模型来完成任务,它还会解释这些模型的回应,然后将它们整合起来生成对用户的回应。 + +范例如下显示当用户请求描述和计算图片中的物体时,这将如何运作: + +## 作业 + +为了继续学习可以使用 AutoGen 构建的 AI 智能体: + +- 一个模拟教育初创公司不同部门商务会议的应用程序。 +- 建立系统信息,引导LLM理解不同角色和优先事项,并使用户能够提出新的产品创意。 +- 然后,LLM应从每个部门生成后续问题,以完善和改进提案和产品创意。 + +## 学习不止于此,继续旅程 + +完成本课程后,请查看我们的[生成式 AI 学习合集](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst)以继续提升您的生成式 AI 知识! + + diff --git a/18-fine-tuning/translations/cn/README.md b/18-fine-tuning/translations/cn/README.md index e69de29bb..7e38a1be9 100644 --- a/18-fine-tuning/translations/cn/README.md +++ b/18-fine-tuning/translations/cn/README.md @@ -0,0 +1,91 @@ +[![开源大模型](../../img/18-lesson-banner.png?WT.mc_id=academic-105485-koreyst)](https://aka.ms/gen-ai-lesson18-gh?WT.mc_id=academic-105485-koreyst) + +# 微调你的大语言模型 (LLM) + +使用大型语言模型来构建生成型 AI 应用程序会带来一些新挑战。一个关键问题是确保模型生成的内容对特定用户请求的响应质量(准确性和相关性)。在之前的课程中,我们讨论了如提示工程和检索增强生成等技术,这些方法试图通过_修改输入提示_来解决这个问题。 + +在今天的课程中,我们讨论第三种技术——**微调**,它通过_重新训练模型本身_并使用额外的数据来解决这个挑战。让我们深入了解细节。 + +## 学习目标 + +本课程介绍了针对预训练语言模型的微调概念,探讨了这种方法的好处与挑战,并提供了在何时以及如何使用微调来提高生成 AI 模型性能的指导。 + +通过本课程的学习,你应该能够回答以下问题: + +- 什么是语言模型的微调? +- 微调何时有用,为什么有用? +- 我该如何微调一个预训练模型? +- 微调的局限性是什么? + +准备好了吗?让我们开始吧。 + +## 插图指南 + +想要在深入了解之前先对本课程的内容有个大概的了解吗?请查看这份插图指南,它描述了我们本课程的学习过程——从理解微调的核心概念和动机,到理解微调任务的过程和最佳实践。这是一个值得深入探讨的有趣主题,别忘了查看[资源页面](./RESOURCES.md?WT.mc_id=academic-105485-koreyst),获取更多支持你自学旅程的链接! + +![微调语言模型插图指南](../../img/18-fine-tuning-sketchnote.png?WT.mc_id=academic-105485-koreyst) + +## 什么是语言模型的微调? + +根据定义,大型语言模型是_预训练的_,使用来自各种来源的大量文本数据进行训练,包括互联网。正如我们在之前的课程中学到的,我们需要像_提示工程_和_检索增强生成_这样的技术,来提高模型对用户问题(“提示”)的响应质量。 + +一种常见的提示工程技术是通过提供_指令_(明确的指导)或_给出几个示例_(隐式的指导)来给模型更多的反馈,告诉它应该如何回应。这种方法被称为_少量学习(few-shot learning)_,但它有两个限制: + +- 模型的令牌限制可能限制你能给出的示例数量,从而限制了效果。 +- 模型的令牌成本可能使得在每个提示中都加入示例变得昂贵,从而限制了灵活性。 + +微调是机器学习系统中的一种常见做法,我们通过使用新的数据来对预训练的模型进行再训练,从而提高其在特定任务上的表现。在语言模型的上下文中,我们可以用一组精心挑选的示例来对预训练的模型进行微调,针对特定任务或应用领域创建一个**定制模型**,使其在该特定任务或领域上表现得更加准确和相关。微调的一个附带好处是,它还可以减少少量学习所需的示例数量——从而减少令牌的使用和相关的成本。 + +## 何时以及为什么应该进行微调? + +在_这个_上下文中,当我们谈论微调时,我们指的是**监督式**微调,其中通过**添加新的数据**(这些数据不包含在原始训练数据集中)来进行再训练。这不同于无监督微调方法,在无监督微调中,模型是在原始数据上进行再训练,但使用不同的超参数。 + +需要记住的关键点是,微调是一种高级技术,需要一定的专业知识才能获得预期的效果。如果操作不当,可能无法提供预期的改进,甚至可能降低模型在特定领域的表现。 + +因此,在你学习“如何”微调语言模型之前,首先需要了解“为什么”你应该选择这种方法,以及“何时”开始微调过程。可以从问自己以下问题开始: + +- **使用场景**:你进行微调的_使用场景_是什么?你希望改善当前预训练模型的哪一方面? +- **替代方案**:你是否尝试过_其他技术_来实现预期的结果?可以将它们作为对比基准。 + - 提示工程:尝试使用少量提示,结合相关的提示响应示例,评估响应质量。 + - 检索增强生成:尝试通过检索你的数据并将查询结果加入提示来增强模型,评估响应质量。 +- **成本**:你是否识别了进行微调的成本? + - 可调性 - 预训练模型是否可以进行微调? + - 努力 - 准备训练数据、评估和优化模型的工作量。 + - 计算 - 运行微调作业以及部署微调模型的计算资源。 + - 数据 - 获取足够质量的示例数据,以便微调产生有效影响。 +- **收益**:你是否确认了微调的收益? + - 质量 - 微调后的模型是否优于基准模型? + - 成本 - 是否通过简化提示来减少了令牌的使用? + - 可扩展性 - 是否可以将基础模型重新用于新的领域? + +通过回答这些问题,你应该能够判断微调是否是适合你的使用场景的正确方法。理想情况下,只有当收益超过成本时,微调才是有效的。一旦决定继续,接下来就是思考_如何_微调预训练模型。 + +想要更深入了解决策过程吗?观看[是否微调](https://www.youtube.com/watch?v=0Jo-z-MFxJs)。 + +## 我们如何微调预训练模型? + +要对预训练模型进行微调,你需要准备以下内容: + +- 一个可微调的预训练模型 +- 用于微调的数据集 +- 一个训练环境来运行微调任务 +- 一个托管环境来部署微调后的模型 + +## 微调实战 + +以下资源提供了逐步的教程,帮助你通过选定的模型和精心挑选的数据集来进行实际操作。要跟随这些教程,你需要在特定提供商处拥有账户,并且可以访问相关的模型和数据集。 + +| 提供商 | 教程链接 | 描述 | +| ------------ | ---------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | +| OpenAI | [如何微调聊天模型](https://github.com/openai/openai-cookbook/blob/main/examples/How_to_finetune_chat_models.ipynb?WT.mc_id=academic-105485-koreyst) | 学习如何微调 `gpt-35-turbo` 用于特定领域(“食谱助手”),包括准备训练数据、运行微调任务,并使用微调后的模型进行推理。 | +| Azure OpenAI | [GPT 3.5 Turbo 微调教程](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python-new%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | 学习如何在 Azure 上微调 `gpt-35-turbo-0613` 模型,涵盖创建并上传训练数据、运行微调任务、部署并使用新模型的步骤。 | +| Hugging Face | [用 Hugging Face 微调 LLM](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | 本博客文章指导你使用 Hugging Face 的 [transformers](https://huggingface.co/docs/transformers/index?WT.mc_id=academic-105485-koreyst) 库和 [Transformer Reinforcement Learning (TRL)](https://huggingface.co/docs/trl/index?WT.mc_id=academic-105485-koreyst) 对一个开源 LLM(例如 `CodeLlama 7B`)进行微调。 | +| 🤗 AutoTrain | [使用 AutoTrain 微调 LLM](https://github.com/huggingface/autotrain-advanced/?WT.mc_id=academic-105485-koreyst) | AutoTrain(或 AutoTrain Advanced)是 Hugging Face 开发的一个 Python 库,允许进行多种任务的微调,包括 LLM 微调。AutoTrain 是一种无代码解决方案,可以在你的云端、Hugging Face Spaces 或本地进行微调。它支持 Web GUI、CLI 和通过 YAML 配置文件进行训练。 | + +## 作业 + +选择上面的一个教程并跟随操作。_我们可能会在本仓库中的 Jupyter Notebooks 中复制这些教程的版本,供参考。请直接使用原始源来获取最新版本_。 + +## 做得好!继续学习。 + +完成本课程后,请查看我们的[生成 AI 学习合集](https://aka.ms/genai-collection?WT diff --git a/19-slm/translations/cn/README.md b/19-slm/translations/cn/README.md index e69de29bb..2031f9492 100644 --- a/19-slm/translations/cn/README.md +++ b/19-slm/translations/cn/README.md @@ -0,0 +1,306 @@ +# 面向初学者的生成式人工智能:小语言模型入门 +生成式人工智能是人工智能领域中一个令人着迷的分支,专注于创建能够生成新内容的系统。这些内容涵盖文本、图像、音乐乃至完整的虚拟环境。生成式人工智能最激动人心的应用之一便是语言模型领域。 + +## 什么是小语言模型? + +小语言模型(SLM)是大型语言模型(LLM)的缩小版本,继承了 LLM 的架构原理和技术,同时显著降低了计算资源需求。 + +作为语言模型的子集,小语言模型专门用于生成类人文本。与 GPT-4 等大型模型不同,SLM 更加紧凑高效,非常适合计算资源有限的应用场景。尽管体积小巧,它们仍能执行多种任务。通常 SLM 通过压缩或蒸馏 LLM 获得,旨在保留原模型大部分功能和语言能力。模型体积的缩减降低了整体复杂度,使 SLM 在内存占用和计算需求方面更加高效。经过优化后,SLM 仍可胜任多种自然语言处理(NLP)任务: + +- 文本生成:创作连贯且符合语境的句子或段落 +- 文本补全:根据给定提示预测并完成句子 +- 翻译:实现不同语言间的文本转换 +- 摘要:将长篇文本浓缩为简洁易懂的摘要 + +不过相较于大型模型,其性能和理解深度会有所折衷。 + +## 小语言模型的工作原理 +SLM 通过海量文本数据进行训练。训练过程中,模型学习语言模式和结构,从而生成语法正确且语境贴切的文本。训练流程包含: + +- 数据收集:从多种渠道获取大规模文本数据集 +- 预处理:清洗整理数据以适应训练需求 +- 训练:运用机器学习算法教授模型理解和生成文本 +- 微调:针对特定任务优化模型性能 + +SLM 的发展顺应了资源受限环境(如移动设备或边缘计算平台)对可部署模型的需求,这些场景中全尺寸 LLM 因资源消耗过高而难以应用。通过效率优化,SLM 在性能与易用性之间取得平衡,拓宽了跨领域应用的可行性。 + +![slm](../../img/slm.png?WT.mc_id=academic-105485-koreyst) + +## 学习目标 + +本课程将结合微软 Phi-3 系列模型,介绍 SLM 在文本内容、视觉和多专家系统(MoE)等不同场景中的应用。 + +完成本课程后,您应能回答以下问题: + +- 什么是 SLM +- SLM 与 LLM 的核心区别 +- 微软 Phi-3/3.5 系列模型的特点 +- 如何调用微软 Phi-3/3.5 系列模型 + +准备好了吗?让我们开始探索。 + +## 大型语言模型(LLM)与小语言模型(SLM)的差异 + +LLM 和 SLM 均基于概率机器学习的基本原理,在架构设计、训练方法、数据生成流程和模型评估技术等方面具有相似性。但以下关键因素构成了二者的主要区别。 + +## 小语言模型的应用领域 + +SLM 具有广泛的应用场景,包括: + +- 聊天机器人:提供客户支持及对话服务 +- 内容创作:辅助作者生成创意或起草完整文章 +- 教育领域:帮助学生完成写作任务或语言学习 +- 辅助功能:开发面向残障人士的文本转语音系统 + +**模型规模** + +LLM(如 ChatGPT/GPT-4)的参数规模可达约 1.76 万亿,而 Mistral 7B 等开源 SLM 参数量仅约 70 亿。这种差异源于架构设计和训练流程的不同。例如,ChatGPT 采用编码器-解码器框架中的自注意力机制,而 Mistral 7B 使用滑动窗口注意力机制,这种仅含解码器的架构实现了更高效的训练。架构差异对模型复杂度和性能具有深远影响。 + +**理解能力** + +SLM 通常针对特定领域优化,虽具备高度专业性但跨领域知识理解能力有限。相比之下,LLM 致力于模拟更全面的人类智能水平。通过海量多样化数据集训练,LLM 在跨领域应用中展现出更强的适应性和通用性,因而更适用于自然语言处理和编程等多样化下游任务。 + +**计算需求** + +LLM 的训练和部署需要大量计算资源,通常依赖大规模 GPU 集群。例如从头训练 ChatGPT 可能需要数千个 GPU 持续工作数月。而参数量较小的 SLM(如 Mistral 7B)可在配备中等性能 GPU 的本地机器上完成训练和运行,不过训练仍需要多个 GPU 持续数小时。 + +**偏差问题** + +LLM 的偏差问题主要源于训练数据特性。这些模型通常依赖互联网公开数据,可能对某些群体存在代表性不足、错误标签或受方言、地域差异及语法规则影响的语用偏差。此外,LLM 架构的复杂性可能在不经意间放大偏差,若未仔细微调则难以察觉。而 SLM 基于受限的领域专用数据集训练,固有偏差风险较低(但并非完全免疫)。 + +**推理效率** + +较小的模型体积赋予 SLM 显著的推理速度优势,可在本地硬件上高效生成输出而无需大规模并行计算。反观 LLM 因规模和复杂度,常需大量并行计算资源才能获得可接受的推理时间。在规模化部署时,多用户并发会进一步降低 LLM 的响应速度。 + + +总结起来,尽管 LLM 与 SLM 共享机器学习基础,但在模型规模、资源需求、语境理解、偏差敏感性和推理速度等方面差异显著。这些区别决定了它们分别适用于不同场景:LLM 通用性强但资源消耗大,SLM 则提供领域专用效率与更低计算需求。 + +(注:本章节将以微软 Phi-3/3.5 系列模型为例介绍 SLM 的应用) + +## Phi-3 / Phi-3.5 系列模型介绍 + +Phi-3 / 3.5 系列主要面向文本、视觉和智能体(MoE)应用场景: + +### Phi-3 / 3.5 指令模型 + +主要用于文本生成、对话完成和内容信息提取等任务。 + +**Phi-3-mini** + +这款 3.8B 参数的语言模型可在 Microsoft Azure AI Studio、Hugging Face 和 Ollama 平台获取。Phi-3 系列模型在关键基准测试中(数值越高越好)显著优于同尺寸及更大规模的语言模型。Phi-3-mini 的表现超越两倍于其尺寸的模型,而 Phi-3-small 和 Phi-3-medium 则优于包括 GPT-3.5 在内的更大模型。 + +**Phi-3-small & medium** + +Phi-3-small 仅需 7B 参数即在语言、推理、编程和数学等多项基准测试中击败 GPT-3.5T。14B 参数的 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 视觉模型 + +将 Phi-3/3.5 的指令模型视为其理解能力,视觉模型则为 Phi 系列增添了观察世界的"眼睛"。 + +**Phi-3-Vision** + +仅 4.2B 参数的 Phi-3-vision 在通用视觉推理、OCR、表格和图表理解等任务中表现优于 Claude-3 Haiku 和 Gemini 1.0 Pro V 等更大模型。 + +**Phi-3.5-Vision** + +Phi-3.5-Vision 是 Phi-3-Vision 的升级版本: +- 新增多图像输入支持(可同时处理多张输入图像进行推理) +- 在 OCR、表格和图表理解任务中表现优于 Claude-3.5 Sonnet 和 Gemini 1.5 Flash +- 通用视觉知识推理任务达到同等水平 + +### Phi-3.5-MoE + +**混合专家系统(MoE)** 技术使模型能够以更少的计算资源进行预训练,即在相同计算预算下显著扩展模型或数据集规模。具体而言,MoE 模型在预训练期间能更快达到密集模型的同等质量水平。 + +Phi-3.5-MoE 包含 16 个 3.8B 专家模块,仅需 6.6B 活跃参数即可实现与更大模型相当的推理、语言理解和数学能力。根据不同的应用场景,开发者可选择部署 Phi-3/3.5 系列的不同模型。与 LLM 不同,Phi-3/3.5-mini 或 Phi-3/3.5-Vision 可部署在边缘设备上。 + +## Phi-3/3.5 系列模型使用方法 + +我们将根据不同场景演示 Phi-3/3.5 的应用。 + +![phi3](../../img/phi3.png?WT.mc_id=academic-105485-koreyst) + +### 云端 API 推理 + +**GitHub 模型库** + +最直接的调用方式是通过 GitHub Models 快速访问 Phi-3/3.5-Instruct 模型: +- 结合 Azure AI Inference SDK / OpenAI SDK 通过代码调用 API +- 通过 Playground 测试不同效果 + +- 演示:Phi-3-mini 与 Phi-3.5-mini 在中文场景的效果对比 + +![phi3](../../img/gh1.png?WT.mc_id=academic-105485-koreyst) + +![phi35](../../img/gh2.png?WT.mc_id=academic-105485-koreyst) + +**Azure AI Studio** + +如需使用视觉和 MoE 模型,可通过 Azure AI Studio 完成调用。具体方法可参考 [Phi-3 Cookbook](https://github.com/microsoft/Phi-3CookBook/blob/main/md/02.QuickStart/AzureAIStudio_QuickStart.md?WT.mc_id=academic-105485-koreyst)。 + +**NVIDIA NIM** + +除了 Azure 和 GitHub 的云端解决方案,还可通过 [NVIDIA NIM](https://developer.nvidia.com/nim?WT.mc_id=academic-105485-koreyst) 进行模型调用。NVIDIA 推理微服务提供: +- 单命令部署 AI 模型 +- 基于 TensorRT 和 TensorRT-LLM 的优化性能 +- Kubernetes 自动扩展 +- 标准化 API 支持 +- 企业级安全控制 + +- 演示:[使用 NVIDIA NIM 调用 Phi-3.5-Vision-API](./python/Phi-3-Vision-Nividia-NIM.ipynb?WT.mc_id=academic-105485-koreyst) + +### 本地环境推理 + +**Hugging Face Transformers** + +这个流行的 NLP 库提供: +1. 数千个预训练模型(涵盖文本分类、问答、摘要等任务) +2. 多框架支持(PyTorch/TensorFlow/JAX) +3. 多模态处理能力(CV/音频) +4. 丰富的社区资源 + +注意:视觉和 MoE 场景需要 GPU 加速,未量化的 CPU 推理效率有限。 + +- 演示: + - [调用 Phi-3.5-Instuct](./python/phi35-instruct-demo.ipynb?WT.mc_id=academic-105485-koreyst) + - [调用 Phi-3.5-Vision](./python/phi35-vision-demo.ipynb?WT.mc_id=academic-105485-koreyst) + - [调用 Phi-3.5-MoE](./python/phi35_moe_demo.ipynb?WT.mc_id=academic-105485-koreyst) + +**Ollama** + +这个本地 LLM 运行平台: +- 支持 Phi 3 等主流模型 +- 提供开箱即用的模型包 +- 支持 Windows/macOS/Linux +- 执行命令即可运行: + +```bash + +ollama run phi3.5 + +``` + + +**ONNX Runtime for GenAI** + +[ONNX Runtime](https://github.com/microsoft/onnxruntime-genai?WT.mc_id=academic-105485-koreyst) 是一个跨平台推理和训练机器学习加速器。ONNX Runtime for Generative AI (GENAI) 是帮助您在各种平台上高效运行生成式 AI 模型的强大工具。 + +## 什么是 ONNX Runtime? +ONNX Runtime 是一个开源项目,可实现机器学习模型的高性能推理。它支持 Open Neural Network Exchange (ONNX) 格式的模型,该格式是表示机器学习模型的开放标准。ONNX Runtime 推理能够提供更快的用户体验并降低成本,支持来自 PyTorch、TensorFlow/Keras 等深度学习框架的模型,以及 scikit-learn、LightGBM、XGBoost 等传统机器学习库。ONNX Runtime 兼容不同硬件、驱动程序和操作系统,通过利用硬件加速器(如适用)并结合图优化和转换来实现最佳性能。 + +## 什么是生成式 AI? +生成式 AI 指能够基于训练数据生成新内容(如文本、图像或音乐)的 AI 系统。典型示例包括 GPT-3 等语言模型和 Stable Diffusion 等图像生成模型。ONNX Runtime for GenAI 库为 ONNX 模型提供生成式 AI 循环功能,包括: +- 使用 ONNX Runtime 进行推理 +- logits 处理 +- 搜索与采样 +- KV 缓存管理 + +## 适用于 GENAI 的 ONNX 运行时 +ONNX Runtime for GENAI 扩展了 ONNX Runtime 对生成式 AI 模型的支持能力,主要特性包括: + +- **广泛平台支持**:兼容 Windows、Linux、macOS、Android 和 iOS 等平台 +- **模型支持**:支持 LLaMA、GPT-Neo、BLOOM 等主流生成式 AI 模型 +- **性能优化**:包含针对 NVIDIA GPU、AMD GPU 等硬件加速器的优化 +- **易用性**:提供简洁 API 便于应用集成,只需少量代码即可生成文本、图像等内容 +- 用户既可调用高层 generate() 方法,也可逐轮运行模型迭代(每次生成一个 token),并能在循环中动态调整生成参数 +- 支持贪婪搜索/束搜索及 TopP、TopK 采样来生成 token 序列,内置重复惩罚等 logits 处理机制,同时支持自定义评分规则 + +## 快速入门 +通过以下步骤开始使用 ONNX Runtime for GENAI: + +### 安装 ONNX 运行时: +```Python +pip install onnxruntime +``` +### 安装 Generative AI Extensions: +```Python +pip install onnxruntime-genai +``` + +### 运行模型:下面是一个 Python 中的简单示例: +```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) +``` +### Demo:使用 ONNX Runtime GenAI 调用 Phi-3.5-Vision + + +```python + +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] + + code += tokenizer_stream.decode(new_token) + + print(tokenizer_stream.decode(new_token), end='', flush=True) + +``` + + +**其他方法** + +除 ONNX Runtime 和 Ollama 的调用方式外,我们还可以基于不同厂商提供的模型调用方法完成量化模型的调用。例如基于 Apple Metal 的 Apple MLX 框架、利用 NPU 的 Qualcomm QNN、基于 CPU/GPU 的 Intel OpenVINO 等。更多内容可参考 [Phi-3 Cookbook](https://github.com/microsoft/phi-3cookbook?WT.mc_id=academic-105485-koreyst)。 + + +## 扩展阅读 + +我们已经学习了 Phi-3/3.5 系列的基础知识,但要深入了解 SLM 还需要更多知识。您可以在 Phi-3 Cookbook 中找到答案。如需进一步学习,请访问 [Phi-3 Cookbook](https://github.com/microsoft/phi-3cookbook?WT.mc_id=academic-105485-koreyst)。 \ No newline at end of file diff --git a/20-mistral/translations/cn/README.md b/20-mistral/translations/cn/README.md index e69de29bb..d5b17e4ac 100644 --- a/20-mistral/translations/cn/README.md +++ b/20-mistral/translations/cn/README.md @@ -0,0 +1,345 @@ +# 使用 Mistral 模型进行构建 + +## 简介 + +本课程将涵盖: +- 探索不同的 Mistral 模型 +- 理解每个模型的用例和场景 +- 代码示例展示每个模型的独特功能。 + +## Mistral 模型 + +在本课程中,我们将探索 3 种不同的 Mistral 模型: +**Mistral Large**,**Mistral Small** 和 **Mistral Nemo**。 + +每个模型都可以在 Github Model 市场免费获取。本笔记本中的代码将使用这些模型来运行代码。有关使用 Github Models 进行 [AI 模型原型设计](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst) 的更多详细信息,请参阅此处。 + +## Mistral Large 2 (2407) +Mistral Large 2 目前是 Mistral 的旗舰模型,专为企业使用而设计。 + +该模型是对原始 Mistral Large 的升级,提供了 +- 更大的上下文窗口 - 128k 对比 32k +- 在数学和编码任务上的更好性能 - 平均准确率 76.9% 对比 60.4% +- 增强的多语言性能 - 包括语言:英语,法语,德语,西班牙语,意大利语,葡萄牙语,荷兰语,俄语,中文,日语,韩语,阿拉伯语和印地语。 + +凭借这些功能,Mistral Large 在以下方面表现出色 +- *检索增强生成 (RAG)* - 由于更大的上下文窗口 +- *函数调用* - 该模型具有原生函数调用功能,允许与外部工具和 API 集成。这些调用可以并行或按顺序进行。 +- *代码生成* - 该模型在 Python,Java,TypeScript 和 C++ 生成方面表现出色。 + +### 使用 Mistral Large 2 的 RAG 示例 + +在本示例中,我们使用 Mistral Large 2 对文本文档运行 RAG 模式。问题用韩语编写,询问作者在上大学前的活动。 + +它使用 Cohere Embeddings Model 为文本文档和问题创建嵌入。对于此示例,它使用 faiss Python 包作为向量存储。 + +发送给 Mistral 模型的提示包括问题以及与问题相似的检索块。然后,模型提供自然语言响应。 + +```python +pip install faiss-cpu +``` + +```python +import requests +import numpy as np +import faiss +import os + +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential +from azure.ai.inference import EmbeddingsClient + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = requests.get('https://raw.githubusercontent.com/run-llama/llama_index/main/docs/docs/examples/data/paul_graham/paul_graham_essay.txt') +text = response.text + +chunk_size = 2048 +chunks = [text[i:i + chunk_size] for i in range(0, len(text), chunk_size)] +len(chunks) + +embed_model_name = "cohere-embed-v3-multilingual" + +embed_client = EmbeddingsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token) +) + +embed_response = embed_client.embed( + input=chunks, + model=embed_model_name +) + + + +text_embeddings = [] +for item in embed_response.data: + length = len(item.embedding) + text_embeddings.append(item.embedding) +text_embeddings = np.array(text_embeddings) + + +d = text_embeddings.shape[1] +index = faiss.IndexFlatL2(d) +index.add(text_embeddings) + +question = "저자가 대학에 오기 전에 주로 했던 두 가지 일은 무엇이었나요??" + +question_embedding = embed_client.embed( + input=[question], + model=embed_model_name +) + +question_embeddings = np.array(question_embedding.data[0].embedding) + + +D, I = index.search(question_embeddings.reshape(1, -1), k=2) # distance, index +retrieved_chunks = [chunks[i] for i in I.tolist()[0]] + +prompt = f""" +Context information is below. +--------------------- +{retrieved_chunks} +--------------------- +Given the context information and not prior knowledge, answer the query. +Query: {question} +Answer: +""" + + +chat_response = client.complete( + messages=[ + SystemMessage(content="You are a helpful assistant."), + UserMessage(content=prompt), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(chat_response.choices[0].message.content) +``` + +## Mistral Small +Mistral Small 是 Mistral 模型系列中的另一个模型,属于高级/企业类别。正如名称所示,该模型是一个小型语言模型 (SLM)。使用 Mistral Small 的优点是: +- 与 Mistral 的其他大语言模型(如 Mistral Large 和 NeMo)相比,成本节省 - 价格下降 80% +- 低延迟 - 相比 Mistral 的大语言模型,响应速度更快 +- 灵活性 - 可以在不同的环境中部署,对所需资源的限制较少。 + +Mistral Small 适用于: +- 基于文本的任务,如摘要,情感分析和翻译。 +- 由于其成本效益,频繁请求的应用程序 +- 低延迟的代码任务,如代码审查和代码建议 + +## 比较 Mistral Small 和 Mistral Large + +为了展示 Mistral Small 和 Large 之间的延迟差异,请运行以下单元格。 + +您应该会看到响应时间差异在 3-5 秒之间。同时请注意,在相同提示下的响应长度和风格。 + +```python + +import os +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-small" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +```python + +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +endpoint = "https://models.inference.ai.azure.com" +model_name = "Mistral-large" +token = os.environ["GITHUB_TOKEN"] + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage(content="You are a helpful coding assistant."), + UserMessage(content="Can you write a Python function to the fizz buzz test?"), + ], + temperature=1.0, + top_p=1.0, + max_tokens=1000, + model=model_name +) + +print(response.choices[0].message.content) + +``` + +## Mistral NeMo + +与本课程中讨论的其他两个模型相比,Mistral NeMo 是唯一一个带有 Apache2 许可证的免费模型。 + +它被视为 Mistral 早期开源大语言模型(LLM)Mistral 7B 的升级版本。 + +NeMo 模型的其他一些特性包括: + +- *更高效的分词:* 该模型使用 Tekken 分词器而不是更常用的 tiktoken 分词器。这使得它在更多语言和代码上的表现更好。 + +- *微调:* 基础模型可用于微调。这为需要微调的用例提供了更大的灵活性。 + +- *原生函数调用* - 与 Mistral Large 类似,该模型经过函数调用的训练。这使其成为首批支持原生函数调用的开源模型之一。 + +### 比较分词器 + +在本示例中,我们将比较 Mistral NeMo 和 Mistral Large 在分词方面的处理方式。 + +两个示例使用相同的提示,但您会发现 NeMo 返回的标记数量少于 Mistral Large。 + +```bash +pip install mistral-common +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "open-mistral-nemo " + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +```python +# Import needed packages: +from mistral_common.protocol.instruct.messages import ( + UserMessage, +) +from mistral_common.protocol.instruct.request import ChatCompletionRequest +from mistral_common.protocol.instruct.tool_calls import ( + Function, + Tool, +) +from mistral_common.tokens.tokenizers.mistral import MistralTokenizer + +# Load Mistral tokenizer + +model_name = "mistral-large-latest" + +tokenizer = MistralTokenizer.from_model(model_name) + +# Tokenize a list of messages +tokenized = tokenizer.encode_chat_completion( + ChatCompletionRequest( + tools=[ + Tool( + function=Function( + name="get_current_weather", + description="Get the current weather", + parameters={ + "type": "object", + "properties": { + "location": { + "type": "string", + "description": "The city and state, e.g. San Francisco, CA", + }, + "format": { + "type": "string", + "enum": ["celsius", "fahrenheit"], + "description": "The temperature unit to use. Infer this from the users location.", + }, + }, + "required": ["location", "format"], + }, + ) + ) + ], + messages=[ + UserMessage(content="What's the weather like today in Paris"), + ], + model=model_name, + ) +) +tokens, text = tokenized.tokens, tokenized.text + +# Count the number of tokens +print(len(tokens)) +``` + +## 学习之旅不会在这里停止,继续前行 + +完成本课程后,请访问我们的 [生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) 以继续提升您的生成式 AI 知识! diff --git a/21-meta/translations/cn/README.md b/21-meta/translations/cn/README.md index e69de29bb..3f38fb2c7 100644 --- a/21-meta/translations/cn/README.md +++ b/21-meta/translations/cn/README.md @@ -0,0 +1,155 @@ +# 使用 Meta 家族模型进行构建 + +## 简介 + +本课程将涵盖: + +- 探索两个主要的 Meta 家族模型 - Llama 3.1 和 Llama 3.2 +- 理解每个模型的用例和场景 +- 代码示例展示每个模型的独特功能 + +## Meta 家族模型 + +在本课程中,我们将探索两个来自 Meta 家族或“Llama 群”中的模型 - Llama 3.1 和 Llama 3.2 + +这些模型有不同的变体,并在 GitHub Model 市场可用。有关使用 GitHub Models 进行 [AI 模型原型设计](https://docs.github.com/en/github-models/prototyping-with-ai-models?WT.mc_id=academic-105485-koreyst) 的更多详细信息,请参阅此处。 + +模型变体: +- Llama 3.1 - 70B Instruct +- Llama 3.1 - 405B Instruct +- Llama 3.2 - 11B Vision Instruct +- Llama 3.2 - 90B Vision Instruct + +*注意:Llama 3 也在 GitHub Models 上可用,但本课程不涵盖* + +## Llama 3.1 + +拥有 4050 亿参数,Llama 3.1 属于开源 LLM 类别。 + +该模型是对早期发布的 Llama 3 的升级,提供了: + +- 更大的上下文窗口 - 128k 令牌 对比 8k 令牌 +- 更大的最大输出令牌 - 4096 对比 2048 +- 更好的多语言支持 - 由于训练令牌的增加 + +这些功能使 Llama 3.1 在构建生成式 AI 应用程序时能够处理更复杂的用例,包括: +- 原生函数调用 - 能够调用 LLM 工作流之外的外部工具和函数 +- 更好的 RAG 性能 - 由于更大的上下文窗口 +- 合成数据生成 - 能够为微调等任务创建有效数据 + +### 原生函数调用 + +Llama 3.1 经过微调,能够更有效地进行函数或工具调用。它还具有两个内置工具,模型可以根据用户提示识别是否需要使用这些工具。这些工具包括: + +- **Brave Search** - 可以通过执行网络搜索来获取最新的信息,如天气 +- **Wolfram Alpha** - 可以用于更复杂的数学计算,因此不需要编写自己的函数 + +您还可以创建 LLM 可以调用的自定义工具。 + +在下面的代码示例中: + +- 我们在系统提示中定义了可用的工具(brave_search, wolfram_alpha)。 +- 发送一个用户提示,询问某个城市的天气。 +- LLM 将响应一个对 Brave Search 工具的调用,看起来像这样 `<|python_tag|>brave_search.call(query="Stockholm weather")` + +*注意:此示例仅进行工具调用,如果您想获取结果,需要在 Brave API 页面创建一个免费账户并定义该函数* + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import AssistantMessage, SystemMessage, UserMessage +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "meta-llama-3.1-405b-instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + + +tool_prompt=f""" +<|begin_of_text|><|start_header_id|>system<|end_header_id|> + +Environment: ipython +Tools: brave_search, wolfram_alpha +Cutting Knowledge Date: December 2023 +Today Date: 23 July 2024 + +You are a helpful assistant<|eot_id|> +""" + +messages = [ + SystemMessage(content=tool_prompt), + UserMessage(content="What is the weather in Stockholm?"), + +] + +response = client.complete(messages=messages, model=model_name) + +print(response.choices[0].message.content) +``` + +## Llama 3.2 + +尽管 Llama 3.1 是一个 LLM,但它的一个限制是多模态性。也就是说,它能够使用不同类型的输入(如图像)作为提示并提供响应。这种能力是 Llama 3.2 的主要特性之一。这些特性还包括: + +- 多模态性 - 能够评估文本和图像提示 +- 小到中等大小的变体(11B 和 90B) - 这提供了灵活的部署选项 +- 仅文本的变体(1B 和 3B) - 这允许模型部署在边缘/移动设备上并提供低延迟 + +多模态支持在开源模型领域是一个重要的进步。下面的代码示例结合了图像和文本提示,以获取 Llama 3.2 90B 对图像的分析。 + +### 多模态支持与 Llama 3.2 + +```python +import os +from azure.ai.inference import ChatCompletionsClient +from azure.ai.inference.models import ( + SystemMessage, + UserMessage, + TextContentItem, + ImageContentItem, + ImageUrl, + ImageDetailLevel, +) +from azure.core.credentials import AzureKeyCredential + +token = os.environ["GITHUB_TOKEN"] +endpoint = "https://models.inference.ai.azure.com" +model_name = "Llama-3.2-90B-Vision-Instruct" + +client = ChatCompletionsClient( + endpoint=endpoint, + credential=AzureKeyCredential(token), +) + +response = client.complete( + messages=[ + SystemMessage( + content="You are a helpful assistant that describes images in details." + ), + UserMessage( + content=[ + TextContentItem(text="What's in this image?"), + ImageContentItem( + image_url=ImageUrl.load( + image_file="sample.jpg", + image_format="jpg", + detail=ImageDetailLevel.LOW) + ), + ], + ), + ], + model=model_name, +) + +print(response.choices[0].message.content) +``` + +## 学习之旅不会在这里停止,继续前行 + +完成本课程后,请查看我们的 [生成式 AI 学习集合](https://aka.ms/genai-collection?WT.mc_id=academic-105485-koreyst) 以持续提升您的生成式 AI 技能! + From 21c562946d6828f8b78c00c37b0544cdcfd53a5c Mon Sep 17 00:00:00 2001 From: ShawnSiao Date: Sun, 20 Apr 2025 00:33:02 +0800 Subject: [PATCH 2/2] fix path and translate resources.md --- 18-fine-tuning/translations/cn/README.md | 2 +- 18-fine-tuning/translations/cn/RESOURCES.md | 36 +++++++++++++++++++++ 19-slm/translations/cn/README.md | 8 ++--- 3 files changed, 41 insertions(+), 5 deletions(-) create mode 100644 18-fine-tuning/translations/cn/RESOURCES.md diff --git a/18-fine-tuning/translations/cn/README.md b/18-fine-tuning/translations/cn/README.md index 7e38a1be9..de6eff9e8 100644 --- a/18-fine-tuning/translations/cn/README.md +++ b/18-fine-tuning/translations/cn/README.md @@ -21,7 +21,7 @@ ## 插图指南 -想要在深入了解之前先对本课程的内容有个大概的了解吗?请查看这份插图指南,它描述了我们本课程的学习过程——从理解微调的核心概念和动机,到理解微调任务的过程和最佳实践。这是一个值得深入探讨的有趣主题,别忘了查看[资源页面](./RESOURCES.md?WT.mc_id=academic-105485-koreyst),获取更多支持你自学旅程的链接! +想要在深入了解之前先对本课程的内容有个大概的了解吗?请查看这份插图指南,它描述了我们本课程的学习过程——从理解微调的核心概念和动机,到理解微调任务的过程和最佳实践。这是一个值得深入探讨的有趣主题,别忘了查看[资源页面](../../RESOURCES.md?WT.mc_id=academic-105485-koreyst),获取更多支持你自学旅程的链接! ![微调语言模型插图指南](../../img/18-fine-tuning-sketchnote.png?WT.mc_id=academic-105485-koreyst) diff --git a/18-fine-tuning/translations/cn/RESOURCES.md b/18-fine-tuning/translations/cn/RESOURCES.md new file mode 100644 index 000000000..75a8a13e4 --- /dev/null +++ b/18-fine-tuning/translations/cn/RESOURCES.md @@ -0,0 +1,36 @@ +# 自主学习资源 + +本课程参考了OpenAI和Azure OpenAI的核心资源构建,涉及术语和教程。以下为非 exhaustive 资源列表,供您自主探索学习。 + +## 1. 核心资源 + +| 标题/链接 | 描述 | +| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| [Fine-tuning with OpenAI Models](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst) | 微调通过训练比提示中能容纳的更多示例来改进少样本学习,从而节省成本、提高响应质量并实现更低延迟的请求。**从OpenAI获取微调的概述**。 | +| [What is Fine-Tuning with Azure OpenAI?](https://learn.microsoft.com/azure/ai-services/openai/concepts/fine-tuning-considerations#what-is-fine-tuning-with-azure-openai?WT.mc_id=academic-105485-koreyst) | 理解**微调的概念**、适用场景(动机问题)、训练数据选择及质量评估方法 | +| [Customize a model with fine-tuning](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | 通过Azure OpenAI Service使用微调技术定制模型。学习如何**通过Azure AI Studio、Python SDK或REST API微调模型**的具体流程。 | +| [Recommendations for LLM fine-tuning](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning-recommend?WT.mc_id=academic-105485-koreyst) | 当LLM在特定领域、任务或数据集上表现不佳,或产生不准确/误导性输出时,**何时应考虑使用微调**作为解决方案? | +| [Continuous Fine Tuning](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning?tabs=turbo%2Cpython&pivots=programming-language-studio#continuous-fine-tuning?WT.mc_id=academic-105485-koreyst) | 持续微调是通过选择已微调模型作为基础模型,**在新增训练示例集上继续微调**的迭代过程。 | +| [Fine-tuning and function calling](https://learn.microsoft.com/azure/ai-services/openai/how-to/fine-tuning-functions?WT.mc_id=academic-105485-koreyst) | 通过**函数调用示例微调模型**可以提高输出准确性、保持响应格式一致性,同时降低成本 | +| [Fine-tuning Models: Azure OpenAI Guidance](https://learn.microsoft.com/azure/ai-services/openai/concepts/models#fine-tuning-models?WT.mc_id=academic-105485-koreyst) | 查阅此表了解**Azure OpenAI中可微调的模型**及区域可用性,查看token限制和训练数据有效期 | +| [To Fine Tune or Not To Fine Tune? That is the Question](https://learn.microsoft.com/shows/ai-show/to-fine-tune-or-not-fine-tune-that-is-the-question?WT.mc_id=academic-105485-koreyst) | 这期30分钟**2023年10月**的AI Show节目探讨微调的优缺点及实践洞察 | +| [Getting Started With LLM Fine-Tuning](https://learn.microsoft.com/ai/playbook/technology-guidance/generative-ai/working-with-llms/fine-tuning-recommend?WT.mc_id=academic-105485-koreyst) | 该**AI Playbook**资源指导数据需求、格式要求、超参数调优及需要注意的挑战/限制 | +| **教程**: [Azure OpenAI GPT3.5 Turbo Fine-Tuning](https://learn.microsoft.com/azure/ai-services/openai/tutorials/fine-tune?tabs=python%2Ccommand-line?WT.mc_id=academic-105485-koreyst) | 学习创建微调样本数据集、准备微调、创建微调任务及在Azure部署微调模型 | +| **教程**: [Fine-tune a Llama 2 model in Azure AI Studio](https://learn.microsoft.com/azure/ai-studio/how-to/fine-tune-model-llama?WT.mc_id=academic-105485-koreyst) | 通过Azure AI Studio的**低代码友好型UI工作流**定制大语言模型 | +| **教程**:[Fine-tune Hugging Face models for a single GPU on Azure](https://learn.microsoft.com/azure/databricks/machine-learning/train-model/huggingface/fine-tune-model?WT.mc_id=academic-105485-koreyst) | 使用Hugging Face transformers库在Azure Databricks单GPU上微调模型的完整指南 | +| **培训**: [Fine-tune a foundation model with Azure Machine Learning](https://learn.microsoft.com/training/modules/finetune-foundation-model-with-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | Azure Machine Learning模型目录提供众多可微调的开源模型,该模块属于[AzureML生成式AI学习路径](https://learn.microsoft.com/training/paths/work-with-generative-models-azure-machine-learning/?WT.mc_id=academic-105485-koreyst) | +| **教程:** [Azure OpenAI Fine-Tuning](https://docs.wandb.ai/guides/integrations/azure-openai-fine-tuning?WT.mc_id=academic-105485-koreyst) | 使用W&B在Microsoft Azure上微调GPT-3.5/GPT-4模型可实现详细的性能跟踪分析 | + + +## 2. 补充资源 + +本节包含值得探索的额外资源,这些内容未在本课程中涵盖。它们可能出现在未来课程或作为课后拓展练习,现阶段可供您自主构建专业知识体系。 + +| 标题/链接 | 描述 | +| :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| **OpenAI Cookbook**: [Data preparation and analysis for chat model fine-tuning](https://cookbook.openai.com/examples/chat_finetuning_data_prep?WT.mc_id=academic-105485-koreyst) | 本notebook提供聊天模型微调数据集预处理与分析工具,可检测格式错误、提供基础统计信息并估算微调成本的token数量。参考:[GPT-3.5 Turbo微调方法](https://platform.openai.com/docs/guides/fine-tuning?WT.mc_id=academic-105485-koreyst) | +| **OpenAI Cookbook**: [Fine-Tuning for Retrieval Augmented Generation (RAG) with Qdrant](https://cookbook.openai.com/examples/fine-tuned_qa/ft_retrieval_augmented_generation_qdrant?WT.mc_id=academic-105485-koreyst) | 本notebook演示如何为检索增强生成(RAG)微调OpenAI模型的完整案例,结合Qdrant向量数据库和少样本学习技术提升模型性能并减少幻觉 | +| **OpenAI Cookbook**: [Fine-tuning GPT with Weights & Biases](https://cookbook.openai.com/examples/third_party/gpt_finetuning_with_wandb?WT.mc_id=academic-105485-koreyst) | Weights & Biases (W&B)是集成模型训练、微调和基础模型应用的AI开发平台。建议先阅读其[OpenAI微调指南](https://docs.wandb.ai/guides/integrations/openai-fine-tuning/?WT.mc_id=academic-105485-koreyst),再尝试本Cookbook实践 | +| **社区教程** [Phinetuning 2.0](https://huggingface.co/blog/g-ronimo/phinetuning?WT.mc_id=academic-105485-koreyst) - 小语言模型微调 | 了解微软推出的[Phi-2](https://www.microsoft.com/research/blog/phi-2-the-surprising-power-of-small-language-models/?WT.mc_id=academic-105485-koreyst)小型语言模型,该教程将指导您构建定制数据集并使用QLoRA技术微调模型 | +| **Hugging Face教程** [2024年使用Hugging Face微调LLMs](https://www.philschmid.de/fine-tune-llms-in-2024-with-trl?WT.mc_id=academic-105485-koreyst) | 本博客逐步指导如何使用Hugging Face TRL、Transformers和datasets库在2024年微调开源LLM,涵盖用例定义、开发环境配置、数据集准备、模型微调、测试评估到生产部署全流程 | +| **Hugging Face: [AutoTrain Advanced](https://github.com/huggingface/autotrain-advanced?WT.mc_id=academic-105485-koreyst)** | 提供[前沿机器学习模型](https://twitter.com/abhi1thakur/status/1755167674894557291?WT.mc_id=academic-105485-koreyst)的快速训练部署方案,包含Colab友好型教程和YouTube视频指导。**反映最新[本地优先](https://twitter.com/abhi1thakur/status/1750828141805777057?WT.mc_id=academic-105485-koreyst)更新**,详见[AutoTrain文档](https://huggingface.co/autotrain?WT.mc_id=academic-105485-koreyst) | diff --git a/19-slm/translations/cn/README.md b/19-slm/translations/cn/README.md index 2031f9492..b1f1feae8 100644 --- a/19-slm/translations/cn/README.md +++ b/19-slm/translations/cn/README.md @@ -154,7 +154,7 @@ Phi-3.5-MoE 包含 16 个 3.8B 专家模块,仅需 6.6B 活跃参数即可实 - 标准化 API 支持 - 企业级安全控制 -- 演示:[使用 NVIDIA NIM 调用 Phi-3.5-Vision-API](./python/Phi-3-Vision-Nividia-NIM.ipynb?WT.mc_id=academic-105485-koreyst) +- 演示:[使用 NVIDIA NIM 调用 Phi-3.5-Vision-API](../../python/Phi-3-Vision-Nividia-NIM.ipynb?WT.mc_id=academic-105485-koreyst) ### 本地环境推理 @@ -169,9 +169,9 @@ Phi-3.5-MoE 包含 16 个 3.8B 专家模块,仅需 6.6B 活跃参数即可实 注意:视觉和 MoE 场景需要 GPU 加速,未量化的 CPU 推理效率有限。 - 演示: - - [调用 Phi-3.5-Instuct](./python/phi35-instruct-demo.ipynb?WT.mc_id=academic-105485-koreyst) - - [调用 Phi-3.5-Vision](./python/phi35-vision-demo.ipynb?WT.mc_id=academic-105485-koreyst) - - [调用 Phi-3.5-MoE](./python/phi35_moe_demo.ipynb?WT.mc_id=academic-105485-koreyst) + - [调用 Phi-3.5-Instuct](../../python/phi35-instruct-demo.ipynb?WT.mc_id=academic-105485-koreyst) + - [调用 Phi-3.5-Vision](../../python/phi35-vision-demo.ipynb?WT.mc_id=academic-105485-koreyst) + - [调用 Phi-3.5-MoE](../../python/phi35_moe_demo.ipynb?WT.mc_id=academic-105485-koreyst) **Ollama**