Qwen2.5-Coder 模型微调教程

MODEL ZOO Nov 15, 2024

LLM微调过去需要数小时的 GPU 时间和专业知识。然而,Unsloth 提供了 Jupyter 笔记本,用于在免费的 Google Colab 实例上进行微调。

Continue 是一款开源 AI 代码助手。它是一个复合 AI 系统,使用一组模型(聊天、自动完成、嵌入等)以及其他组件。它的主要优点之一是记录开发数据,这对于微调 LLM 以向开发人员提供更好的建议非常有用。

在这篇文章中,我展示了如何使用 Unsloth 微调Qwen2.5-Coder 7B模型,以便可以将通用的开源自动完成模型替换为根据开发数据进行微调的模型。

本文中的操作需要一个帐户来使用 Hugging Face 数据集和一个帐户来使用 Google Colab

1、将开发数据复制到工作目录

Linux/macOS:

    mkdir training_data && cp training_data
    cp ~/.continue/dev_data/autocomplete.jsonl .

Windows:

    md training_data && cp training_data
    copy C:\Users\username\.continue\dev_data\autocomplete.jsonl .

2、格式化开发数据

Unsloth 笔记本使用 alpaca 数据集格式:

  • 指令:描述模型应执行的任务。52K 指令中的每一个都是唯一的。
  • 输入:任务的可选上下文或输入。例如,当指令为“Summarize the following article”时,输入就是文章。大约 40% 的示例具有输入
  • 输出:由 text-davinci-003 生成的指令答案。

Unsloth 仅使用开发数据中的提示和完成字段,例如:

    {
        "prompt": "[SUFFIX]\n    </div>\n  );\n}\n[PREFIX]import { SharedHeader } from \"@/components/shared-header\";\n\nexport function UserSettingsPage() {\n  return (\n    <div>\n      <SharedHeader />\n      <h1>User Settings</h1>\n      ",
        "completion": "<p>This is the user settings page.</p>",
    }

我们将使用 dlt 格式化训练数据并将其保存到 Hugging Face 数据集

    import dlt
    import json
    
    from huggingface_hub import HfApi
    
    
    @dlt.resource(table_name="autocompletions")
    def resource():
        with open("autocomplete.jsonl", "r") as file:
            for line in file:
                full_data = json.loads(line)
                if full_data["accepted"]:
                    yield {
                        "instruction": full_data["prompt"],
                        "input": "",
                        "output": full_data["completion"],
                    }
    
    
    @dlt.destination(batch_size=0, loader_file_format="parquet")
    def hf_destination(items, table):
        api = HfApi()
        api.upload_file(
            path_or_fileobj=items,
            path_in_repo=items.split("/")[-1],
            repo_id="<username>/continue-training-data",
            repo_type="dataset",
        )
    
    
    pipeline = dlt.pipeline(pipeline_name="continue_data", destination=hf_destination)
    
    load_info = pipeline.run(resource())
    
    print(load_info)

3、微调模型

我们将使用 Unsloth 笔记本在 Google Colab 中微调 Qwen2.5-Coder-7B。笔记本中没有列出该模型,但 Unsloth 在 Hugging Face 上有超过 200 个模型可用。在笔记本的第二个单元格中设置要使用的模型:

model, tokenizer = FastLanguageModel.from_pretrained(
        model_name = "unsloth/Qwen2.5-Coder-7B-bnb-4bit",
        max_seq_length = max_seq_length,
        dtype = dtype,
        load_in_4bit = load_in_4bit,
        # token = "hf_...", # use one if using gated models like meta-llama/Llama-2-7b-hf
    )

在数据准备单元格中,指定上传到 Hugging Face 数据集的训练数据:

    from datasets import load_dataset
    dataset = load_dataset("<username>/continue-training-data", split = "train")
    dataset = dataset.map(formatting_prompts_func, batched = True,)

现在我们已经选择了一个模型并加载了开发数据,我们可以使用 Hugging Face 的监督式微调训练器 (SFT) 对其进行微调。

4、保存模型

Unsloth笔记本提供了几种保存模型的选项,包括仅保存 LORA 模型、float16 格式以及由 Ollama、LM Studio 和 Llamafile 等推理引擎支持的 GGUF 格式。

在 GGUF / llama.cpp 转换单元中,将模型保存为 Hugging Face 作为 q4_k_m 量化模型,该模型在大小和准确性方面达到平衡。提供你的存储库、模型名称和 Hugging Face 令牌以保存模型:

    # Save to q4_k_m GGUF
    if False: model.save_pretrained_gguf("model", tokenizer, quantization_method = "q4_k_m")
    if False: model.push_to_hub_gguf("<username>/qwen2.5-coder-continue", tokenizer, quantization_method = "q4_k_m", token = "hf-xxxxxx")

5、运行笔记本

要运行笔记本,请选择 Runtime > Run All

6、使用 Ollama 进行推理

从 Hugging Face 下载模型。我们将使用 Ollama 运行经过训练的模型,但首先我们必须导入模型。创建一个名为 qwen2.5-coder-continue 的 Ollama 模型文件并添加以下内容:

  FROM /path/to/qwen2.5-coder-continue

使用 ollama create 命令构建模型。使用 ollama list 查看模型并使用 ollama start启动模型:

    ollama create qwen2.5-coder-continue
    ollama list
    ollama start qwen2.5-coder-continue

7、配置 Continue

最后一步是使用模型配置 Continue。编辑 config.json 文件并使用模型名称更新 tabAutocompleteModel

    "tabAutocompleteModel": {
        "title": "Qwen2.5 Coder Continue",
        "provider": "ollama",
        "model": "qwen2.5-coder-continue"
    },

8、结束语

自动完成模型在各种数据集上进行训练。这些数据集包括来自开源项目的代码、其他开发人员编写的代码以及合成生成的代码。使用开发数据微调模型可以提高建议的准确性,因为它基于你实际编写的内容。


原文链接:A custom autocomplete model in 30 minutes using Unsloth

汇智网翻译整理,转载请标明出处

Tags