在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务

在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务

今天,我们很高兴地宣布 Meta 使用以下方法微调 Code Llama 模型的能力: 亚马逊SageMaker JumpStart。 Code Llama 大型语言模型 (LLM) 系列是预先训练和微调的代码生成模型的集合,其规模从 7 亿到 70 亿个参数不等。经过微调的 Code Llama 模型比基本 Code Llama 模型提供了更好的准确性和可解释性,这一点在其针对 人类评估 和 MBPP 数据集。您可以使用 SageMaker JumpStart 微调和部署 Code Llama 模型 亚马逊SageMaker Studio 只需点击几下或使用 SageMaker Python SDK 即可获得 UI。 Llama 模型的微调基于中提供的脚本 llama-recipes GitHub 存储库 来自 Meta,使用 PyTorch FSDP、PEFT/LoRA 和 Int8 量化技术。

在这篇文章中,我们将介绍如何通过 SageMaker JumpStart 通过一键式 UI 和 SDK 体验来微调 Code Llama 预训练模型,如下所示 GitHub存储库.

什么是 SageMaker JumpStart

借助 SageMaker JumpStart,机器学习 (ML) 从业者可以从众多公开可用的基础模型中进行选择。机器学习从业者可以将基础模型部署到专用的 亚马逊SageMaker 来自网络隔离环境的实例,并使用 SageMaker 自定义模型进行模型训练和部署。

什么是代码骆驼

Code Llama 是一个代码专用版本 骆驼2 它是通过在其特定于代码的数据集上进一步训练 Llama 2 并从同一数据集中采样更多数据而创建的。 Code Llama 具有增强的编码功能。它可以根据代码和自然语言提示生成代码和有关代码的自然语言(例如,“给我写一个输出斐波那契数列的函数”)。您还可以使用它来完成代码和调试。它支持当今使用的许多最流行的编程语言,包括 Python、C++、Java、PHP、Typescript (JavaScript)、C#、Bash 等。

为什么要微调 Code Llama 模型

Meta 发布了 Code Llama 性能基准 HumanEval 和 MBPP 适用于 Python、Java 和 JavaScript 等常见编码语言。 Code Llama Python 模型在 HumanEval 上的性能在不同的编码语言和任务中表现出不同的性能,范围从 38B Python 模型上的 7% 到 57B Python 模型上的 70%。此外,在 SQL 编程语言上经过微调的 Code Llama 模型显示出更好的结果,这一点在 SQL 评估基准中得到了证明。这些发布的基准凸显了微调 Code Llama 模型的潜在好处,可以实现更好的性能、定制以及适应特定编码领域和任务。

通过 SageMaker Studio UI 进行无代码微调

要开始使用 SageMaker Studio 微调 Llama 模型,请完成以下步骤:

  1. 在 SageMaker Studio 控制台上,选择 快速启动 在导航窗格中。

您将找到超过 350 个模型的列表,其中包括开源模型和专有模型。

  1. 搜索 Code Llama 模型。
    在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

如果您没有看到 Code Llama 模型,您可以通过关闭并重新启动来更新您的 SageMaker Studio 版本。有关版本更新的更多信息,请参阅 关闭并更新 Studio 应用程序。您还可以通过选择找到其他型号变体 探索所有代码生成模型 或在搜索框中搜索 Code Llama。

在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

SageMaker JumpStart 目前支持 Code Llama 模型的指令微调。以下屏幕截图显示了 Code Llama 2 70B 模型的微调页面。

  1. 针对 训练数据集位置,您可以指向 亚马逊简单存储服务 (Amazon S3) 存储桶,包含用于微调的训练和验证数据集。
  2. 设置部署配置、超参数和安全设置以进行微调。
  3. 培训 在 SageMaker ML 实例上启动微调作业。
    在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

我们将在下一节中讨论您需要为指令微调准备的数据集格式。

  1. 模型微调后,您可以使用 SageMaker JumpStart 上的模型页面进行部署。

微调完成后,将出现部署微调模型的选项,如下图所示。

在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。

通过 SageMaker Python SDK 进行微调

在本节中,我们将演示如何在指令格式数据集上使用 SageMaker Python SDK 微调 Code LIama 模型。具体来说,该模型针对使用指令描述的一组自然语言处理 (NLP) 任务进行了微调。这有助于通过零样本提示提高模型针对看不见的任务的性能。

完成以下步骤来完成您的微调工作。您可以从以下位置获取完整的微调代码 GitHub存储库.

首先,我们看一下指令微调所需的数据集格式。训练数据应采用 JSON 行 (.jsonl) 格式,其中每行都是代表数据样本的字典。所有训练数据必须位于一个文件夹中。但是,它可以保存在多个 .jsonl 文件中。以下是 JSON 行格式的示例:

{
	'system_prompt': 'a chat',
	'question': 'Please focus on the efficiency of this problem and provide code in python:nYou are given two strings `s` and `t` consisting of only lowercase English letters.nnReturn _the minimum number of characters that need to be appended to the end of_ `s` _so that_ `t` _becomes a **subsequence** of_ `s`.nnA **subsequence** is a string that can be derived from another string by deleting some or no characters without changing the order of the remaining characters.nn**Example 1:**nn**Input:** s = "coaching ", t = "coding "n**Output:** 4n**Explanation:** Append the characters "ding " to the end of s so that s = "coachingding ".nNow, t is a subsequence of s ( "**co**aching**ding** ").nIt can be shown that appending any 3 characters to the end of s will never make t a subsequence.nn**Example 2:**nn**Input:** s = "abcde ", t = "a "n**Output:** 0n**Explanation:** t is already a subsequence of s ( "**a**bcde ").nn**Example 3:**nn**Input:** s = "z ", t = "abcde "n**Output:** 5n**Explanation:** Append the characters "abcde " to the end of s so that s = "zabcde ".nNow, t is a subsequence of s ( "z**abcde** ").nIt can be shown that appending any 4 characters to the end of s will never make t a subsequence.nn**Constraints:**nn* `1 <= s.length, t.length <= 105`n* `s` and `t` consist only of lowercase English letters.',
	'response': '### Explanationn The algorithm maintains two pointers, `i` and `j`, to iterate through the given strings `s` and `t`. The pointer `i` iterates through the string `s` and the pointer `j` iterates through the string `t`. While iterating through `s`, if we find a character that matches the current character in `t`, we increment the `j` pointer. This is because the matched character can be a part of the subsequence we are looking for. The iteration stops when either `i` reaches the end of `s` or `j` reaches the end of `t`.nnAt the end, we subtract the index `j` from the length of `t`. This gives us the minimum number of characters that need to be appended to the end of `s` so that `t` becomes a subsequence of `s`.nn### Pseudocode:n```nMIN-ADDITION(s, t)n s_len = LENGTH(s)n t_len = LENGTH(t)n i = 1n j = 1n WHILE i <= s_len AND j <= t_lenn IF s[i] == t[j]n j = j + 1n ENDIFn i = i + 1n ENDWHILEn RETURN t_len - j + 1nENDMIN-ADDITIONn```nn### Coden```pythonndef min_addition(s: str, t: str) -> int:n s_len = len(s)n t_len = len(t)n i, j = 0, 0n while i < s_len and j < t_len:n if s[i] == t[j]:n j += 1n i += 1n return t_len - jn```n'
}

训练文件夹可以包含 template.json 描述输入和输出格式的文件。以下是一个示例模板:

{
    "prompt": "{system_prompt} ### Input: {question}",
    "completion": "{response}"
}

为了匹配模板,JSON 行文件中的每个示例必须包含 system_prompt, questionresponse 字段。在本演示中,我们使用 Dolphin Coder 数据集 来自《拥抱的脸》。

准备好数据集并将其上传到 S3 存储桶后,您可以使用以下代码开始微调:

from sagemaker.jumpstart.estimator import JumpStartEstimator

model_id = "meta-textgeneration-llama-codellama-7b" 
model_version = "*"
train_data_location = f"s3://{your_own_bucket_hosting_training_data}/" # training data in s3 bucket

estimator = JumpStartEstimator(
    model_id=model_id,
    model_version=model_version,
    hyperparameters= hyperparameters,
    environment={
        "accept_eula": "false"
    },  # please change `accept_eula` to be `true` to accept EULA.
)

estimator.fit({"training": train_data_location})

您可以直接从估计器部署微调后的模型,如以下代码所示。有关详细信息,请参阅笔记本中的 GitHub存储库.

finetuned_predictor = estimator.deploy()

微调技术

Llama 等语言模型的大小超过 10 GB 甚至 100 GB。 微调如此大的模型需要具有非常高的 CUDA 内存的实例。 此外,由于模型的大小,训练这些模型可能会非常慢。 因此,为了高效微调,我们使用以下优化:

  • 低阶适应(LoRA) – 这是一种参数高效微调(PEFT),用于对大型模型进行高效微调。使用此方法,您可以冻结整个模型,并且仅向模型中添加一小组可调整参数或层。例如,您可以微调不到 7% 的参数,而不是为 Llama 2 7B 训练所有 1 亿个参数。这有助于显着减少内存需求,因为您只需要存储 1% 参数的梯度、优化器状态和其他训练相关信息。此外,这有助于减少培训时间和成本。有关此方法的更多详细信息,请参阅 LoRA:大型语言模型的低秩适应.
  • Int8 量化 – 即使采用 LoRA 等优化,Llama 70B 等模型仍然太大而无法训练。为了减少训练期间的内存占用,您可以在训练期间使用 Int8 量化。量化通常会降低浮点数据类型的精度。尽管这减少了存储模型权重所需的内存,但由于信息丢失而降低了性能。 Int8 量化仅使用四分之一精度,但不会导致性能下降,因为它不会简单地丢弃位。它将数据从一种类型舍入为另一种类型。要了解 Int8 量化,请参阅 LLM.int8():大规模 Transformer 的 8 位矩阵乘法.
  • 完全分片数据并行 (FSDP) – 这是一种数据并行训练算法,它将模型的参数分片到数据并行工作器上,并且可以选择将部分训练计算卸载到 CPU。 尽管参数分布在不同的 GPU 上,但每个微批次的计算都是 GPU 工作线程本地的。 它更均匀地对参数进行分片,并通过训练期间的通信和计算重叠来实现优化的性能。

下表总结了具有不同设置的每个型号的详细信息。

型号 默认设置 洛拉+FSDP LORA + 无 FSDP Int8 量化 + LORA + 无 FSDP
代码骆驼 2 7B 洛拉+FSDP
代码骆驼 2 13B 洛拉+FSDP
代码骆驼 2 34B INT8 + LORA + 无 FSDP 没有 没有
代码骆驼 2 70B INT8 + LORA + 无 FSDP 没有 没有

Llama 模型的微调基于以下提供的脚本 GitHub回购.

支持的训练超参数

Code Llama 2 微调支持许多超参数,每个超参数都会影响微调模型的内存需求、训练速度和性能:

  • 时代 – 微调算法通过训练数据集的次数。 必须是大于 1 的整数。默认值为 5。
  • 学习率 – 在完成每批训练示例后模型权重的更新率。 必须是大于 0 的正浮点数。默认值为 1e-4。
  • 指令调整 – 是否对模型进行指令训练。必须是 True or False。 默认为 False.
  • 每个设备训练批次大小 – 用于训练的每个 GPU 核心/CPU 的批量大小。 必须是正整数。 默认值为 4。
  • 每设备评估批量大小 – 用于评估的每个 GPU 核心/CPU 的批量大小。 必须是正整数。 默认值为 1。
  • 最大训练样本数 – 为了调试目的或加快训练速度,请将训练示例的数量截断为此值。 值-1表示使用所有训练样本。 必须是正整数或-1。 默认值为-1。
  • 最大值样本数 – 为了调试目的或加快训练速度,请将验证示例的数量截断为此值。 值 -1 表示使用所有验证样本。 必须是正整数或-1。 默认值为-1。
  • 最大输入长度 – 标记化后的最大总输入序列长度。 超过此长度的序列将被截断。 如果-1, max_input_length 设置为最小值 1024 和分词器定义的最大模型长度。 如果设置为正值, max_input_length 设置为提供的值的最小值和 model_max_length 由分词器定义。 必须是正整数或-1。 默认值为-1。
  • 验证分割比率 – 如果验证通道是 none,从训练数据中分割训练验证的比率必须在 0-1 之间。默认值为 0.2。
  • 训练数据分割种子 – 如果不存在验证数据,则会修复输入训练数据与算法使用的训练和验证数据的随机分割。 必须是整数。 默认值为 0。
  • preprocessing_num_workers – 用于预处理的进程数。 如果 None,主进程用于预处理。 默认为 None.
  • 劳拉_r – Lora R。必须是正整数。 默认值为 8。
  • 洛拉阿尔法 ——洛拉·阿尔法。 必须是正整数。 默认值为 32
  • 劳拉_辍学 ——洛拉辍学。 必须是 0 到 1 之间的正浮点数。默认值为 0.05。
  • int8_量化 - 如果 True,模型加载8位精度进行训练。 7B 和 13B 的默认值为 False。 70B 的默认值是 True.
  • 启用_fsdp – 如果为 True,则训练使用 FSDP。 7B 和 13B 的默认值为 True。 70B 的默认值为 False。注意 int8_quantization FSDP 不支持。

选择超参数时,请考虑以下因素:

  • 设置 int8_quantization=True 减少内存需求并加快训练速度。
  • 降低 per_device_train_batch_sizemax_input_length 减少了内存需求,因此可以在较小的实例上运行。 但是,设置非常低的值可能会增加训练时间。
  • 如果您不使用 Int8 量化(int8_quantization=False),使用 FSDP(enable_fsdp=True)以实现更快、更高效的培训。

支持的训练实例类型

下表总结了训练不同模型所支持的实例类型。

型号 默认实例类型 支持的实例类型
代码骆驼 2 7B ml.g5.12xlarge

毫升.g5.12xlarge,

毫升.g5.24xlarge,

毫升.g5.48xlarge,

ml.p3dn.24xlarge,

ml.g4dn.12xlarge

代码骆驼 2 13B ml.g5.12xlarge

毫升.g5.24xlarge,

毫升.g5.48xlarge,

ml.p3dn.24xlarge,

ml.g4dn.12xlarge

代码骆驼 2 70B ml.g5.48xlarge

ml.g5.48xlarge

ml.p4d.24xlarge

选择实例类型时,请考虑以下因素:

  • G5 实例提供支持的实例类型中最高效的训练。 因此,如果您有可用的 G5 实例,则应该使用它们。
  • 训练时间很大程度上取决于 GPU 数量和可用 CUDA 内存。 因此,在具有相同 GPU 数量的实例(例如 ml.g5.2xlarge 和 ml.g5.4xlarge)上进行训练大致相同。 因此,您可以使用更便宜的实例进行训练(ml.g5.2xlarge)。
  • 使用 p3 实例时,将以 32 位精度进行训练,因为这些实例不支持 bfloat16。 因此,与 g3 实例相比,在 p5 实例上训练时,训练作业将消耗双倍的 CUDA 内存。

要了解每个实例的训练成本,请参阅 Amazon EC2 G5实例.

评价

评估是评估微调模型性能的重要步骤。我们提供定性和定量评估,以显示微调模型相对于非微调模型的改进。在定性评估中,我们展示了微调和非微调模型的示例响应。在定量评价中,我们使用 人类评估,OpenAI 开发的测试套件,用于生成 Python 代码,以测试生成正确和准确结果的能力。 HumanEval 存储库已获得 MIT 许可。我们对不同大小的所有 Code LIama 模型的 Python 变体进行了微调(代码 LIama Python 7B、13B、34B 和 70B Dolphin Coder 数据集),并在以下部分中介绍评估结果。

定性评价

部署微调模型后,您可以开始使用端点生成代码。在下面的示例中,我们在测试样本上展示了基本代码 LIama 34B Python 变体和微调代码 LIama XNUMXB Python 变体的响应 Dolphin Coder 数据集:

alpaca_format = """{system_prompt}

### Input:
{question}

### Response:n"""

system="You are a coding AI"
prompt = """Please explain the reasoning behind the following solution and 
provide code in python: Given a string `s`, return the longest palindromic 
substring in `s`. **Example 1:** **Input:** s = "babad " **Output:** "bab " 
**Explanation:** "aba " is also a valid answer. **Example 2:** 
**Input:** s = "cbbd " **Output:** "bb " 
**Constraints:** * `1 <= s.length <= 1000` * `s` consist of only digits 
and English letters."""

payload = json.dumps({
    "inputText": alpaca_format.format(system_prompt=system, question=prompt),
    "textGenerationConfig": {
    "maxTokenCount": 2048,
    "temperature":0.2
}})

finetuned_response = finetuned_predictor.predict(payload)
finetuned_response["generated_text"]

经过微调的 Code Llama 模型除了提供前面查询的代码之外,还生成该方法的详细解释和伪代码。

代码 Llama 34b Python 非微调响应:

### Code
def longestPalindrome(s):
    # Fill this in.
    longest = ""
    for i in range(len(s)):
        for j in range(len(s), i, -1):
            if len(longest) >= j-i:
                break
            elif s[i:j] == s[i:j][::-1]:
                longest = s[i:j]
                break
    return longest

print(longestPalindrome("abaxyzzyxf"))
# axyzzyx
###Reference:
- [https://www.geeksforgeeks.org/longest-palindrome-substring-set-1/]
(https://www.geeksforgeeks.org/longest-palindrome-substring-set-1/)

Code Llama 34B Python 微调响应

### Explanation
The algorithm uses dynamic programming to find the longest palindromic substring. 
It initializes a 2D boolean table `dp` with the same dimensions as the input string `s`. 
The `dp[i][j]` value is set to `true` if the substring from index `i` to index `j` is a palindrome.

The algorithm then iterates through the string in a nested loop, starting from the first character to the last. 
It checks if the substring from index `i` to index `j` is a palindrome. 
If it is, it sets the `dp[i][j]` value to `true`. 
If the substring is of length 2 or 3, it sets the `dp[i][j]` value to `true` as well.

After the nested loop, the algorithm iterates through the `dp` table to find the longest palindromic substring. 
It keeps track of the maximum length and the starting and ending indices of the substring.

Finally, the algorithm returns the substring from the starting index to the ending index.

### Code
```python
def longestPalindrome(s: str) -> str:
    n = len(s)
    dp = [[False] * n for _ in range(n)]

    for i in range(n):
        dp[i][i] = True
        if i + 1 < n:
            dp[i][i + 1] = s[i] == s[i + 1]

    max_len = 1
    start = 0
    end = 0

    for i in range(n - 1):
        for j in range(i + 1, n):
            if j - i == 1 or dp[i + 1][j - 1]:
                dp[i][j] = s[i] == s[j]
                if j - i + 1 > max_len:
                    max_len = j - i + 1
                    start = i
                    end = j

    return s[start:end + 1]
```

地面真相

### Explanation 
1. Initialize `start` and `maxLength` for result substring. 
2. Iterate through the given string `s` using the index `i`. 
3. For each index `i`, create two pointers `l` and `r` starting at `i`. 
4. Check if there's a consecutive sequence of identical characters, increment the right pointer `r` until the end of the sequence is reached. 
5. Update the index `i` to the current value of `r`. 
6. Expand the pointers `l` and `r` outwards to find the longest palindromic substring, checking that characters on both sides are equal. 
7. If the current length of the substring is greater than `maxLength`, update `start` and `maxLength`. 
8. Return the longest palindromic substring using the `start` and `maxLength`. 

### Code 
```python 
def longest_palindromic_substring(s: str) → str:
    n = len(s)
    if n == 0:
        return ""
    
    start, max_length = 0, 1
    for i in range(n):
        l, r = i, i
        while r < n - 1 and s[r] == s[r + 1]:
            r += 1
            i = r
        while l > 0 and r < n - 1 and s[l - 1] == s[r + 1]:
            l -= 1
            r += 1
        length = r - l + 1
        if length > max_length:
            start, max_length = l, length
    return s[start:start + max_length]
```

有趣的是,我们的 Code Llama 34B Python 的微调版本为最长回文子串提供了基于动态编程的解决方案,这与所选测试示例的基本事实中提供的解决方案不同。我们的微调模型详细解释了基于动态规划的解决方案。另一方面,非微调模型在 print 语句(显示在左侧单元格中)因为输出 axyzzyx 不是给定字符串中最长的回文。就时间复杂度而言,动态规划解决方案通常优于初始方法。动态规划解决方案的时间复杂度为 O(n^2),其中 n 是输入字符串的长度。这比非微调模型的初始解决方案更有效,后者的二次时间复杂度为 O(n^2),但优化方法较少。

这看起来很有希望!请记住,我们仅对 Code LIama Python 变体进行了 10% 的微调 Dolphin Coder 数据集。还有更多值得探索的地方!

尽管响应中有详细说明,我们仍然需要检查解决方案中提供的 Python 代码的正确性。接下来,我们使用一个名为的评估框架 人类评估 对 Code LIama 生成的响应运行集成测试,以系统地检查其质量。

使用 HumanEval 进行定量评估

HumanEval 是一个评估工具,用于评估法学硕士解决基于 Python 的编码问题的能力,如论文中所述 评估在代码上训练的大型语言模型。具体来说,它由 164 个基于 Python 的原始编程问题组成,这些问题评估语言模型根据提供的信息(如函数签名、文档字符串、正文和单元测试)生成代码的能力。

对于每个基于 Python 的编程问题,我们将其发送到部署在 SageMaker 端点上的 Code LIama 模型以获取 k 个响应。接下来,我们对 HumanEval 存储库中的集成测试运行 k 个响应中的每一个。如果 k 个响应中的任何一个响应通过了集成测试,我们就认为测试用例成功;否则,失败。然后我们重复这个过程,计算成功案例的比例,作为最终的评估分数,命名为 pass@k。按照标准做法,我们在评估中将 k 设置为 1,以便每个问题仅生成一个响应并测试它是否通过集成测试。

以下是使用 HumanEval 存储库的示例代码。您可以使用 SageMaker 端点访问数据集并生成单个响应。有关详细信息,请参阅笔记本中的 GitHub存储库.

%pip3 install human_eval
import json
from human_eval.evaluation import evaluate_functional_correctness
from human_eval.data import write_jsonl, read_problems
from tqdm import tqdm
problems = read_problems()

num_samples_per_task = 1 # value k: number of responses for each question
samples = [
    dict(task_id=task_id, completion=generate_one_completion(problems[task_id]["prompt"]))
    for task_id in tqdm(problems)
    for _ in range(num_samples_per_task)
]
write_jsonl("samples.jsonl", samples)

evaluate_functional_correctness('./samples.jsonl')

下表显示了在不同模型大小上,微调的 Code LIama Python 模型相对于非微调模型的改进。为了确保正确性,我们还在 SageMaker 端点中部署了未微调的 Code LIama 模型,并运行 Human Eval 评估。这 通过@1 数字(下表中的第一行)与报告中的数字相匹配 代码骆驼研究论文。 推理参数一致设置为 "parameters": {"max_new_tokens": 384, "temperature": 0.2}.

从结果中我们可以看到,所有经过微调的 Code LIama Python 变体都比未经微调的模型有了显着的改进。特别是,代码 LIama Python 70B 的性能比未微调的模型高出约 12%。

. 7B 蟒蛇 13B 蟒蛇 34B 34B 蟒蛇 70B 蟒蛇
预训练模型性能 (pass@1) 38.4 43.3 48.8 53.7 57.3
微调模型性能 (pass@1) 45.12 45.12 59.1 61.5 69.5

现在您可以尝试在自己的数据集上微调 Code LIama 模型。

清理

如果您决定不再希望保持 SageMaker 端点运行,您可以使用以下命令将其删除 适用于Python的AWS开发工具包(Boto3), AWS命令行界面 (AWS CLI) 或 SageMaker 控制台。有关更多信息,请参阅 删除端点和资源. 此外,您可以 关闭 SageMaker Studio 资源 不再需要的。

结论

在这篇文章中,我们讨论了使用 SageMaker JumpStart 微调 Meta 的 Code Llama 2 模型。我们展示了您可以使用 SageMaker Studio 中的 SageMaker JumpStart 控制台或 SageMaker Python SDK 来微调和部署这些模型。我们还讨论了微调技术、实例类型和支持的超参数。此外,我们根据我们进行的各种测试概述了优化训练的建议。正如我们从两个数据集上微调三个模型的结果中看到的,与非微调模型相比,微调提高了概括能力。下一步,您可以尝试使用 GitHub 存储库中提供的代码在您自己的数据集上微调这些模型,以测试和基准测试用例的结果。


作者简介

在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。黄鑫博士 是 Amazon SageMaker JumpStart 和 Amazon SageMaker 内置算法的高级应用科学家。 他专注于开发可扩展的机器学习算法。 他的研究兴趣是自然语言处理、表格数据的可解释深度学习以及非参数时空聚类的稳健分析。 他在 ACL、ICDM、KDD 会议和 Royal Statistical Society: Series A 上发表了多篇论文。

在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。维沙尔·亚拉曼恰利 是一名初创解决方案架构师,与早期生成式人工智能、机器人和自动驾驶汽车公司合作。 Vishaal 与客户合作提供尖端的 ML 解决方案,并且个人对强化学习、LLM 评估和代码生成感兴趣。在加入 AWS 之前,Vishaal 是 UCI 的一名本科生,主修生物信息学和智能系统。

在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。Meenakshisundaram 坦达瓦拉扬 在 AWS 担任 AI/ML 专家。他热衷于设计、创建和推广以人为本的数据和分析体验。 Meena 专注于开发可持续系统,为 AWS 的战略客户提供可衡量的竞争优势。 Meena 是一位沟通者和设计思想家,致力于通过创新、孵化和民主化推动企业采用新的工作方式。

在 Amazon SageMaker JumpStart 上微调 Code Llama |亚马逊网络服务柏拉图区块链数据智能。垂直搜索。人工智能。Ashish Khetan 博士 是 Amazon SageMaker 内置算法的高级应用科学家,帮助开发机器学习算法。 他在伊利诺伊大学香槟分校获得博士学位。 他是机器学习和统计推理领域的活跃研究者,在 NeurIPS、ICML、ICLR、JMLR、ACL 和 EMNLP 会议上发表了多篇论文。

时间戳记:

更多来自 AWS机器学习