你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

如何将 Meta Llama 系列模型与 Azure 机器学习工作室配合使用

本文介绍 Meta Llama 模型系列 (LLM)。 Meta Llama 模型和工具是预先训练和微调的生成式 AI 文本和图像推理模型的集合,其规模从适用于设备上和边缘推理的 SLM(1B、3B 基础和指示模型)到中型 LLM(7B、8B 和 70B 基础和指示模型),再到专为合成数据生成与知识蒸馏用例而设计的高性能模型,如 Meta Llama 3.1 405B Instruct。

提示

通过 Meta 的博客Microsoft Tech Community 博客,查看关于现已在 Azure AI 模型目录中正式发布 Meta 的 Llama 3.2 系列模型的公告。

请参阅以下 GitHub 示例,了解与 LangChainLiteLLMOpenAIAzure API 的集成。

重要

此功能目前处于公开预览状态。 此预览版在提供时没有附带服务级别协议,我们不建议将其用于生产工作负荷。 某些功能可能不受支持或者受限。

有关详细信息,请参阅 Microsoft Azure 预览版补充使用条款

Meta Llama 系列模型

Meta Llama 系列模型包括以下模型:

Llama 3.2 系列 SLM 和图像推理模型现已推出。 Llama 3.2 11B Vision Instruct 和 Llama 3.2 90B Vision Instruct 即将通过模型即服务作为无服务器 API 终结点推出。 即日起,以下模型将通过托管计算进行部署:

  • Llama 3.2 1B
  • Llama 3.2 3B
  • Llama 3.2 1B Instruct
  • Llama 3.2 3B Instruct
  • Llama Guard 3 1B
  • Llama Guard 11B Vision
  • Llama 3.2 11B Vision Instruct
  • Llama 3.2 90B Vision Instruct 可用于托管计算部署。

先决条件

  • 具有有效付款方式的 Azure 订阅。 不能使用免费或试用 Azure 订阅。 如果没有 Azure 订阅,请先创建一个付费的 Azure 帐户

  • 一个 Azure 机器学习工作区和一个计算实例。 如果没有,请使用快速入门:创建工作区资源一文中的步骤创建它们。 Meta Llama 3.1 和 Llama 3 的无服务器 API 模型部署服务仅适用于在以下区域创建的工作区:

    • 美国东部
    • 美国东部 2
    • 美国中北部
    • 美国中南部
    • 美国西部
    • 美国西部 3
    • 瑞典中部

    有关支持无服务器 API 终结点部署的每个模型可用的区域列表,请参阅“无服务器 API 终结点中模型的区域可用性”。

  • Azure 基于角色的访问控制 (Azure RBAC) 用于授予对 Azure 机器学习中的操作的访问权限。 要执行本文中的步骤,必须为用户帐户分配 Azure 订阅的所有者参与者角色。 或者,可以为帐户分配具有以下权限的自定义角色:

    • 在 Azure 订阅中,将工作区订阅到 Azure 市场产品/服务的权限,每个工作区每个产品/服务一次:

      • Microsoft.MarketplaceOrdering/agreements/offers/plans/read
      • Microsoft.MarketplaceOrdering/agreements/offers/plans/sign/action
      • Microsoft.MarketplaceOrdering/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.Marketplace/offerTypes/publishers/offers/plans/agreements/read
      • Microsoft.SaaS/register/action
    • 在资源组上,创建和使用 SaaS 资源的权限:

      • Microsoft.SaaS/resources/read
      • Microsoft.SaaS/resources/write
    • 在工作区中,部署终结点的权限(Azure 机器学习数据科学家角色已包含这些权限):

      • Microsoft.MachineLearningServices/workspaces/marketplaceModelSubscriptions/*
      • Microsoft.MachineLearningServices/workspaces/serverlessEndpoints/*

    有关权限的详细信息,请参阅管理对 Azure 机器学习工作区的访问权限

创建新部署

若要创建部署:

  1. 转到 Azure 机器学习工作室

  2. 选择要在其中部署模型的工作区。 若要使用即用即付模型部署产品/服务,你的工作区必须属于本文先决条件中列出的可用区域之一。

  3. 模型目录中选择 Meta-Llama-3.1-405B-Instruct 进行部署。

    或者,可以通过转到工作区并选择“终结点”>“无服务器终结点”>“创建”来启动部署。

  4. Meta-Llama-3.1-405B-Instruct 的“详细信息”页面上选择“部署”,然后选择“Azure AI 内容安全的无服务器 API”

  5. 在部署向导中,选择“Azure 市场条款”的链接,了解有关使用条款的详细信息。 还可以选择“市场产品/服务详细信息”选项卡,了解所选模型的定价。

  6. 如果这是你第一次在工作区中部署模型,则必须为工作区订阅 Azure 市场的特定产品/服务(例如 Meta-Llama-3.1-405B-Instruct)。 此步骤要求帐户具有先决条件中列出的 Azure 订阅权限和资源组权限。 每个工作区都订阅特定 Azure 市场产品/服务,可用于控制和监视支出。 选择“订阅和部署”。

    注意

    若要将工作区订阅到特定的 Azure 市场产品/服务(本例中为 Meta-Llama-3-70B),帐户必须在创建该项目的订阅级别具有“参与者”或“所有者”访问权限。 或者,可以为用户帐户分配一个自定义角色,该角色具有先决条件中列出的 Azure 订阅权限和资源组权限。

  7. 注册特定 Azure 市场产品/服务的工作区后,同一工作区中同一产品/服务的后续部署不需要再次订阅。 因此,无需具有后续部署的订阅级权限。 如果此方案适合你,请选择“继续部署”。

  8. 为部署命名。 此名称将成为部署 API URL 的一部分。 此 URL 必须在每个 Azure 区域中唯一。

  9. 选择“部署”。 等待部署完成,然后将重定向到无服务器终结点页。

  10. 选择终结点以打开其详细信息页。

  11. 选择“测试”选项卡,开始与模型交互。

  12. 还可以记下“目标”URL 和“密钥”来调用部署并生成完成。

  13. 始终可以通过导航到“工作区”>“终结点”>“无服务器终结点”来查找终结点的详细信息、URL 和访问密钥。

若要了解部署为无服务器 API 的 Meta Llama 模型的计费,请参阅部署为无服务器 API 的 Meta Llama 模型的成本和配额注意事项

使用 Meta Llama 模型作为服务

部署为服务的模型可以通过聊天 API 或完成 API 使用,具体取决于部署的模型类型。

  1. 在工作区中,选择“终结点”>“无服务器终结点”。

  2. 查找并选择你创建的 Meta-Llama-3.1-405B-Instruct 部署。

  3. 复制“目标”URL 和“密钥”令牌值。

  4. 根据部署的模型类型发出 API 请求。

    有关使用 API 的详细信息,请参阅参考部分。

部署为无服务器 API 的 Meta Llama 3.1 模型参考

Llama 模型接受路由 /chat/completions 上的 Azure AI 模型推理 API,或 /v1/chat/completions 上的 Llama 聊天 API。 同样,可以使用路由 /completions 上的 Azure AI 模型推理 API/v1/completions 上的 Llama 补全 API 生成文本补全项

可以在聊天补全参考一文和可以从终结点本身获取 OpenAPI 规范中找到 Azure AI 模型推理 API 架构。

完成 API

使用方法 POST 将请求发送到 /v1/completions 路由:

请求

POST /v1/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json

请求架构

有效负载是一个 JSON 格式的字符串,其中包含以下参数:

密钥 类型 默认 说明
prompt string 无默认设置。 必须指定此值。 发送到模型的提示。
stream boolean False 流式处理允许生成的令牌在可用时以仅数据服务器发送事件的形式发送。
max_tokens integer 16 在完成中生成的最大令牌数。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。
top_p float 1 温度采样的替代方法,称为核心采样,其中模型将考虑具有 top_p 概率质量的令牌的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的令牌。 我们通常建议更改 top_ptemperature,但不要同时更改两者。
temperature float 1 要使用的采样温度,介于 0 到 2 之间。 较高的值意味着模型样本的分布范围更广。 零表示贪婪采样。 建议更改此它或 top_p,但不要同时更改两者。
n integer 1 要为每个提示生成的完成数。
注意:由于此参数会生成许多完成,因此可能会快速消耗你的令牌配额。
stop array null 字符串或字符串列表,其中包含 API 停止生成其他令牌的单词。 返回的文本不包含停止序列。
best_of integer 1 在服务器端生成 best_of 完成并返回“最佳”(每个令牌的日志概率最低的参数)。 无法流式传输结果。 与 n 一起使用时,best_of 控制候选完成数,n 指定返回的完成数,best_of 的值必须大于 n
注意:由于此参数会生成许多完成,因此可能会快速消耗你的令牌配额。
logprobs integer null 一个数字,指示包含有关 logprobs 最有可能的令牌和已选择的令牌的日志概率。 例如,如果 logprobs 为 10,则 API 会返回包含 10 个最有可能的令牌的列表。 API 会始终返回采样令牌的 logprob,因此响应中可能最多有 logprobs+1 个元素。
presence_penalty float null 介于 -2.0 和 2.0 之间的数字。 正值会根据它们到目前为止是否在文本中出现来惩罚新令牌,从而增加模型谈论新话题的可能性。
ignore_eos boolean True 是否忽略 EOS 令牌,并在生成 EOS 令牌后继续生成令牌。
use_beam_search boolean False 是否使用书搜索而不是采样。 在这种情况下,best_of 必须大于 1,且 temperature 必须为 0
stop_token_ids array null 令牌的 ID 列表,这些令牌生成时会停止继续生成令牌。 返回的输出包含停止令牌,除非停止标记是特殊令牌。
skip_special_tokens boolean null 是否跳过输出中的特殊令牌。

示例

正文

{
    "prompt": "What's the distance to the moon?",
    "temperature": 0.8,
    "max_tokens": 512,
}

响应架构

响应有效负载是具有以下字段的字典。

密钥 类型 描述
id string 完成的唯一标识符。
choices array 为输入提示生成的模型完成选项的列表。
created integer 创建完成时间的 Unix 时间戳(以秒为单位)。
model string 用于完成的 model_id。
object string 始终为 text_completion 的对象类型。
usage object 完成请求的使用情况统计信息。

提示

在流式处理模式下,对于每个响应区块,finish_reason 始终为 null,但最后一个由有效负载 [DONE] 终止的流式处理模式除外。

choices 对象是具有以下字段的字典。

密钥 类型 描述
index integer 选择索引。 当 best_of> 1 时,此数组中的索引可能不按顺序排列,并且可能不是 0 到 n-1。
text string 完成结果。
finish_reason string 模型停止生成令牌的原因:
- stop:模型到达了自然停止点或用户提供的停止序列。
- length:如果已达到最大令牌数。
- content_filter:RAI 审查和 CMP 强制审查时。
- content_filter_error:审查期间出错,无法就响应做出决定。
- null:API 回复仍在进行中或未完成。
logprobs object 输出文本中生成的标记的对数概率。

usage 对象是具有以下字段的字典。

密钥 类型
prompt_tokens integer 提示中的标记数。
completion_tokens integer 完成时生成的令牌数。
total_tokens integer 令牌总数。

logprobs 对象是具有以下字段的字典:

密钥 类型
text_offsets arrayintegers 完成输出中每个令牌的位置或索引。
token_logprobs arrayfloat top_logprobs 数组中的字典中选择 logprobs
tokens arraystring 所选令牌。
top_logprobs arraydictionary 字典数组。 在每个字典中,密钥是令牌,值为概率。

示例

{
    "id": "12345678-1234-1234-1234-abcdefghijkl",
    "object": "text_completion",
    "created": 217877,
    "choices": [
        {
            "index": 0,
            "text": "The Moon is an average of 238,855 miles away from Earth, which is about 30 Earths away.",
            "logprobs": null,
            "finish_reason": "stop"
        }
    ],
    "usage": {
        "prompt_tokens": 7,
        "total_tokens": 23,
        "completion_tokens": 16
    }
}

聊天 API

使用方法 POST 将请求发送到 /v1/chat/completions 路由:

请求

POST /v1/chat/completions HTTP/1.1
Host: <DEPLOYMENT_URI>
Authorization: Bearer <TOKEN>
Content-type: application/json

请求架构

有效负载是一个 JSON 格式的字符串,其中包含以下参数:

密钥 类型 默认 说明
messages string 无默认设置。 必须指定此值。 消息的消息或历史记录,用于提示模型。
stream boolean False 流式处理允许生成的令牌在可用时以仅数据服务器发送事件的形式发送。
max_tokens integer 16 在完成中生成的最大令牌数。 提示加上 max_tokens 的令牌计数不能超过模型的上下文长度。
top_p float 1 温度采样的替代方法,称为核心采样,其中模型将考虑具有 top_p 概率质量的令牌的结果。 所以 0.1 意味着只考虑包含前 10% 概率质量的令牌。 我们通常建议更改 top_ptemperature,但不要同时更改两者。
temperature float 1 要使用的采样温度,介于 0 到 2 之间。 较高的值意味着模型样本的分布范围更广。 零表示贪婪采样。 建议更改此它或 top_p,但不要同时更改两者。
n integer 1 要为每个提示生成的完成数。
注意:由于此参数会生成许多完成,因此可能会快速消耗你的令牌配额。
stop array null 字符串或字符串列表,其中包含 API 停止生成其他令牌的单词。 返回的文本不包含停止序列。
best_of integer 1 在服务器端生成 best_of 完成并返回“最佳”(每个令牌的日志概率最低的参数)。 无法流式传输结果。 与 n 一起使用时,best_of 控制候选完成数,n 指定返回的完成数,best_of 的值必须大于 n
注意:由于此参数会生成许多完成,因此可能会快速消耗你的令牌配额。
logprobs integer null 一个数字,指示包含有关 logprobs 最有可能的令牌和已选择的令牌的日志概率。 例如,如果 logprobs 为 10,则 API 会返回包含 10 个最有可能的令牌的列表。 API 将始终返回采样令牌的 logprob,因此响应中可能最多有 logprobs+1 个元素。
presence_penalty float null 介于 -2.0 和 2.0 之间的数字。 正值会根据它们到目前为止是否在文本中出现来惩罚新令牌,从而增加模型谈论新话题的可能性。
ignore_eos boolean True 是否忽略 EOS 令牌,并在生成 EOS 令牌后继续生成令牌。
use_beam_search boolean False 是否使用书搜索而不是采样。 在这种情况下,best_of 必须大于 1,且 temperature 必须为 0
stop_token_ids array null 令牌的 ID 列表,这些令牌生成时会停止继续生成令牌。 返回的输出包含停止令牌,除非停止标记是特殊令牌。
skip_special_tokens boolean null 是否跳过输出中的特殊令牌。

messages 对象具有以下字段:

密钥 类型
content string 消息的内容。 所有消息都需要内容。
role string 消息作者的角色。 systemuserassistant 之一。

示例

正文

{
    "messages":
    [
        { 
        "role": "system", 
        "content": "You are a helpful assistant that translates English to Italian."},
        {
        "role": "user", 
        "content": "Translate the following sentence from English to Italian: I love programming."
        }
    ],
    "temperature": 0.8,
    "max_tokens": 512,
}

响应架构

响应有效负载是具有以下字段的字典。

密钥 类型 描述
id string 完成的唯一标识符。
choices array 为输入消息生成的模型完成选项列表。
created integer 创建完成时间的 Unix 时间戳(以秒为单位)。
model string 用于完成的 model_id。
object string 始终为 chat.completion 的对象类型。
usage object 完成请求的使用情况统计信息。

提示

在流式处理模式下,对于每个响应区块,finish_reason 始终为 null,但最后一个由有效负载 [DONE] 终止的流式处理模式除外。 在每个 choices 对象中,messages 的键由 delta 更改。

choices 对象是具有以下字段的字典。

密钥 类型 描述
index integer 选择索引。 best_of> 1 时,此数组中的索引可能不按顺序排列,并且可能不是 0n-1
messagesdelta string 聊天完成结果为 messages 对象。 使用流式处理模式时,将使用 delta 键。
finish_reason string 模型停止生成令牌的原因:
- stop:模型到达了自然停止点或用户提供的停止序列。
- length:如果已达到最大令牌数。
- content_filter:RAI 审查和 CMP 强制审查时
- content_filter_error:审查期间出错,无法就响应做出决定
- null:API 回复仍在进行中或未完成。
logprobs object 输出文本中生成的标记的对数概率。

usage 对象是具有以下字段的字典。

密钥 类型
prompt_tokens integer 提示中的标记数。
completion_tokens integer 完成时生成的令牌数。
total_tokens integer 令牌总数。

logprobs 对象是具有以下字段的字典:

密钥 类型
text_offsets arrayintegers 完成输出中每个令牌的位置或索引。
token_logprobs arrayfloat top_logprobs 数组中的字典中选择 logprobs
tokens arraystring 所选令牌。
top_logprobs arraydictionary 字典数组。 在每个字典中,密钥是令牌,值为概率。

示例

下面是一个示例响应:

{
    "id": "12345678-1234-1234-1234-abcdefghijkl",
    "object": "chat.completion",
    "created": 2012359,
    "model": "",
    "choices": [
        {
            "index": 0,
            "finish_reason": "stop",
            "message": {
                "role": "assistant",
                "content": "Sure, I\'d be happy to help! The translation of ""I love programming"" from English to Italian is:\n\n""Amo la programmazione.""\n\nHere\'s a breakdown of the translation:\n\n* ""I love"" in English becomes ""Amo"" in Italian.\n* ""programming"" in English becomes ""la programmazione"" in Italian.\n\nI hope that helps! Let me know if you have any other sentences you\'d like me to translate."
            }
        }
    ],
    "usage": {
        "prompt_tokens": 10,
        "total_tokens": 40,
        "completion_tokens": 30
    }
}

将 Meta Llama 模型部署到托管计算

除了使用即用即付托管服务进行部署外,还可以将 Meta Llama 3.1 模型部署到 Azure 机器学习工作室中的托管计算。 部署到托管计算时,可以选择有关运行该模型的基础结构的所有详细信息,包括要使用的虚拟机和处理预期负载的实例数。 部署到托管计算的模型使用订阅中的配额。 可以在托管计算上使用 3.1 发行波次中的以下模型:

  • Meta-Llama-3.1-8B-Instruct(支持 FT)
  • Meta-Llama-3.1-70B-Instruct(支持 FT)
  • Meta-Llama-3.1-8B(支持 FT)
  • Meta-Llama-3.1-70B(支持 FT)
  • Llama Guard 3 8B
  • Prompt Guard

创建新部署

按照这些步骤在 Azure 机器学习工作室中将模型(例如 Meta-Llama-3.1-70B-Instruct)部署到托管计算。

  1. 选择要在其中部署模型的工作区。

  2. 从工作室的模型目录中选择要部署的模型。

    或者,可以通过转到工作区并选择“终结点”>“托管计算”>“创建”来启动部署。

  3. 在模型的概述页面上,选择“部署”,然后选择“没有 Azure AI 内容安全的托管计算”。

  4. 在“使用 Azure AI 内容安全(预览版)进行部署”页上,选择“跳过 Azure AI 内容安全”,以便继续使用 UI 部署模型。

    提示

    一般情况下,建议选择“启用 Azure AI 内容安全(建议)”以部署 Meta Llama 模型。 此部署选项目前仅支持在笔记本中使用 Python SDK。

  5. 选择“继续”。

    提示

    如果所选项目中没有足够的可用配额,可以使用选项我想使用共享配额,并且我确认将在 168 小时内删除此终结点

  6. 选择要分配给部署的虚拟机和实例计数。

  7. 选择要将此部署作为新终结点还是现有终结点的一部分创建。 终结点可以托管多个部署,同时保留每个部署的资源配置独占。 同一终结点下的部署共享终结点 URI 及其访问密钥。

  8. 指示是否要启用推理数据收集(预览版)

  9. 指示是否要启用包模型(预览版)。

  10. 选择“部署”。 片刻之后,将打开终结点的“详细信息”页。

  11. 等待终结点创建和部署完成。 此步骤可能需要几分钟。

  12. 选择终结点的“使用”页,获取可用于在应用程序中使用已部署的模型的示例代码。

若要详细了解如何使用工作室将模型部署到托管计算,请参阅将基础模型部署到终结点进行推理

使用部署到托管计算的 Meta Llama 模型

有关如何调用部署到托管计算的 Meta Llama 3 模型的参考,请参阅 Azure 机器学习工作室模型目录中的模型卡片。 每个模型的卡片都有一个概述页,其中包含模型说明、基于代码的推理、微调和模型评估的示例。

其他推理示例

示例笔记本
使用 CURL 和 Python Web 请求的 CLI webrequests.ipynb
OpenAI SDK(实验性) openaisdk.ipynb
LangChain langchain.ipynb
LiteLLM SDK litellm.ipynb

成本和配额

部署为无服务器 API 的 Meta Llama 3.1 模型的成本和配额注意事项

部署为无服务器 API 的 Meta Llama 3.1 模型由 Meta 通过 Azure 市场提供,并与 Azure 机器学习工作室集成以供使用。 部署或微调模型时,可以看到 Azure 市场定价。

每当工作区从 Azure 市场订阅给定产品/服务时,都会创建一个新资源来跟踪与其消耗相关的成本。 同一资源用于跟踪与推理和微调相关的成本。但是,可以使用多个计量器来独立跟踪每个方案。

有关如何跟踪成本的详细信息,请参阅监视通过 Azure 市场提供的模型的成本

显示与不同模型产品/服务及其关联计量对应的不同资源的屏幕截图。

配额是按部署管理的。 每个部署的速率限制为每分钟 400,000 个令牌和每分钟 1,000 个 API 请求。 但是,我们目前的限制为每个项目每个模型一个部署。 如果当前速率限制不能满足你的方案,请联系 Microsoft Azure 支持部门。

部署为托管计算的 Meta Llama 3.1 模型的成本和配额注意事项

对于使用托管计算部署和推理 Meta Llama 3.1 模型,可以使用按区域分配给订阅的虚拟机 (VM) 核心配额。 注册 Azure AI Studio 时,你会收到所在区域中可用的多个 VM 系列的默认 VM 配额。 你可以继续创建部署,直到达到配额限制。 达到此限制后,可以请求增加配额。

内容筛选

部署为无服务器 API 的模型将受 Azure AI 内容安全保护。 部署到托管计算后,可以选择退出此功能。 启用 Azure AI 内容安全后,提示和补全会经过一系列分类模型,旨在检测和防止输出有害内容。 内容筛选(预览版)系统会在输入提示和输出补全中检测特定类别的潜在有害内容并对其采取措施。 详细了解 Azure AI 内容安全