返回顶部
热门问答 更多热门问答
技术文章 更多技术文章

如何微调Meta Llama-3 8B

[复制链接]
链载Ai 显示全部楼层 发表于 1 小时前 |阅读模式 打印 上一主题 下一主题


https://exnrt.com/blog/ai/finetune-llama3-8b/

Meta 推出了 Meta Llama 3 系列 LLM,包括 8 和 70B 大小的预训练和指令调整的生成文本模型。这些指令调整模型针对对话进行了优化,在行业基准测试中优于许多开源聊天模型。在开发过程中,我们特别注意优化实用性和安全性。

目录概览:


微调
微调是机器学习中使用的一种技术,尤其是大型语言模型 (LLM)。这是一种利用现有模型的知识并针对特定任务进行定制的方法。

开始微调Llama-3 8B

第 1 步:安装库

  • pip install huggingface_hub ipython:这将安装两个库:用于从 Hugging Face Hub 访问模型和用于交互式编码。huggingface_hubipython

  • "unsloth[colab] @ git+https://github.com/unslothai/unsloth.git" "unsloth[conda] @git+https://github.com/unslothai/unsloth.git":这将从 GitHub 安装 Unsloth 库,为 Google Colab()和 conda 环境()指定不同的选项。[colab][conda]

  • export HF_TOKEN=xxxxxxxxxxxxx:可能用于为 Hugging Face Hub 设置身份验证令牌,但出于安全原因,实际令牌值是隐藏的。

pipinstallhuggingface_hubipython"unsloth[colab]@git+https://github.com/unslothai/unsloth.git""unsloth[conda]@git+https://github.com/unslothai/unsloth.git"exportHF_TOKEN=xxxxxxxxxxxxx

安装Wandb

  1. 安装 Wandb 库:安装与 Wandb 交互所需的库。pip install wandb

  2. 登录:提示您输入 Wandb 凭据(可能是 API 密钥),以便您可以使用该服务。wandb login
pipinstallwandbwandblogio

导入库

importosfromunslothimportFastLanguageModelimporttorchfromtrlimportSFTTrainerfromtransformersimportTrainingArgumentsfromdatasetsimportload_dataset

加载数据集

  1. 设置最大序列长度:定义每个训练示例中允许的最大标记数。这有助于在训练期间管理内存和计算资源。max_seq_length = 2048

  2. 定义数据 URL:以 JSONL 格式存储数据集的 Web 地址,可能包含文本数据。url

  3. 加载数据集:使用库从提供的 URL 加载数据。dataset = load_dataset("json", data_files = {"train" : url}, split = "train")datasets
  • load_dataset("json")将数据格式指定为 JSON。

  • data_filesdictionary 使用键“train”和 URL 作为其值定义训练数据位置。

  • split="train"表示我们正在加载数据集的训练部分。

max_seq_length=2048url="https://huggingface.co/datasets/laion/OIG/resolve/main/unified_chip2.jsonl"dataset=load_dataset("json",data_files={"train":url},split="train")

加载 Llama-3-8B

#2.LoadLlama3modelmodel,tokenizer=FastLanguageModel.from_pretrained(model_name="unsloth/llama-3-8b-bnb-4bit",#指定Unsloth库中的确切模型。“Llama3”可能是型号名称,“8b”表示80亿个参数,“bnb”可能是指特定的架构,“4bit”表示使用内存效率高的格式。max_seq_length=max_seq_length,#设置最大序列长度(前面定义)以限制模型可以处理的输入长度。dtype=None,#(假设它设置为None)允许库选择最合适的数据类型load_in_4bit=True,#允许以内存高效的4位格式加载模型(如果模型和硬件支持))
generate_text
defgenerate_text(text):inputs=tokenizer([text],return_tensors="pt").to("cuda")outputs=model.generate(**inputs,max_new_tokens=20,use_cache=True)tokenizer.batch_decode(outputs)print("Beforetraining\n")

进行模型参数设置和快速 LoRA 权重和训练

model=FastLanguageModel.get_peft_model(model,r=16,target_modules=["q_proj","k_proj","v_proj","o_proj","gate_proj","up_proj","down_proj",],lora_alpha=16,lora_dropout=0,#Supportsany,but=0isoptimizedbias="none",#Supportsany,but="none"isoptimizeduse_gradient_checkpointing=True,random_state=3407,max_seq_length=max_seq_length,use_rslora=False,#RankstabilizedLoRAloftq_config=None,#LoftQ)

开始训练

trainer=SFTTrainer(model=model,train_dataset=dataset,dataset_text_field="text",max_seq_length=max_seq_length,tokenizer=tokenizer,args=TrainingArguments(per_device_train_batch_size=2,gradient_accumulation_steps=4,warmup_steps=10,max_steps=60,fp16=nottorch.cuda.is_bf16_supported(),bf16=torch.cuda.is_bf16_supported(),logging_steps=1,output_dir="outputs",optim="adamw_8bit",weight_decay=0.01,lr_scheduler_type="linear",seed=3407,),)trainer.train()

测试模型

print("\n########\nAftertraining\n")generate_text("<human>istthetop5mostpopularmoviesofalltime.\n<bot>:")

保存模型

model.save_pretrained("lora_model")model.save_pretrained_merged("outputs",tokenizer,save_method="merged_16bit",)model.push_to_hub_merged("YOURUSERNAME/llama3-8b-oig-unsloth-merged",tokenizer,save_method="merged_16bit",token=os.environ.get("HF_TOKEN"))model.push_to_hub("YOURUSERNAME/llama3-8b-oig-unsloth",tokenizer,save_method="lora",token=os.environ.get("HF_TOKEN"))


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

链载AI是专业的生成式人工智能教程平台。提供Stable Diffusion、Midjourney AI绘画教程,Suno AI音乐生成指南,以及Runway、Pika等AI视频制作与动画生成实战案例。从提示词编写到参数调整,手把手助您从入门到精通。
  • 官方手机版

  • 微信公众号

  • 商务合作

  • Powered by Discuz! X3.5 | Copyright © 2025-2025. | 链载Ai
  • 桂ICP备2024021734号 | 营业执照 | |广西笔趣文化传媒有限公司|| QQ