微调大模型,这个听起来似乎是一个普通玩家遥不可及的事情,现在竟也轻而易举了。
本篇教程,将带你初步体验一下微调大模型的整个过程,依然全程白嫖!(白嫖党狂喜)
我们为什么需要微调大模型?
想象一下,你有一个超级聪明的机器人朋友,它知道很多很多事情,比如怎么做饭、怎么画画、怎么算数学题等等。这个机器人朋友就是大语言模型。
但是,这个机器人朋友虽然很聪明,它有时候还是不能理解我们想要它做的具体事情。比如,我们想让它帮忙写一篇关于“春天的花园”的文章,但是它可能会写出一篇关于“春天的花园里怎么种菜”的文章,这可能不是我们想要的。
这时候,我们就需要“微调”这个机器人朋友。微调就像是给机器人朋友一些特别的训练,让它更擅长做我们想要的事情。比如,我们可以给它看很多篇关于“春天的花园”的文章,让它学习这些文章的风格和内容。这样,当我们再让它写一篇关于“春天的花园”的文章时,它就能写出我们想要的内容了。
所以,微调大语言模型就像给一个聪明的机器人朋友一些特别的训练,让它更擅长做我们想要的事情,更好地理解和满足我们的需求。(这个例子是大模型写的 233…)
-
因为本教程只为让小白用户初步体验,无特定业务场景,且为了让所有人都可以进行操作。所以本次使用谷歌算力和一个简单的公开数据集,在云端进行微调训练。
-
大爷都会,你一定能行!
GO!
一、需要科学上网。
不会的话去看评论区。
二、需要一个谷歌账号。
不会的话请搜索百度完成。
三、打开谷歌Colab,并登录谷歌账号:
点击或复制到浏览器:
https://colab.research.google.com/drive/135ced7oHytdxu3N2DNe1Z0kqjyYIkDXp?usp=sharing
四、打开新命令行
五、选择GPU
六、点击代码行,直接粘贴下方代码
%%capture``import torch``major_version, minor_version = torch.cuda.get_device_capability()``# Must install separately since Colab has torch 2.2.1, which breaks packages``!pip install "unsloth[colab-new] @ git+https://github.com/unslothai/unsloth.git"``if major_version >= 8:` `# Use this for new GPUs like Ampere, Hopper GPUs (RTX 30xx, RTX 40xx, A100, H100, L40)` `!pip install --no-deps packaging ninja einops flash-attn xformers trl peft accelerate bitsandbytes``else:` `# Use this for older GPUs (V100, Tesla T4, RTX 20xx)` `!pip install --no-deps xformers trl peft accelerate bitsandbytes``pass
七、点击“小三角”开始运行
等待完成,完成后会有如下示意
八、继续执行
复制以下代码,按下图所示,粘贴进入,点击三角运行
from unsloth import FastLanguageModel``import torch``max_seq_length = 2048 # Choose any! We auto support RoPE Scaling internally!``dtype = None # None for auto detection. Float16 for Tesla T4, V100, Bfloat16 for Ampere+``load_in_4bit = True # Use 4bit quantization to reduce memory usage. Can be False.`` ``# 4bit pre quantized models we support for 4x faster downloading + no OOMs.``fourbit_models = [` `"unsloth/mistral-7b-bnb-4bit",` `"unsloth/mistral-7b-instruct-v0.2-bnb-4bit",` `"unsloth/llama-2-7b-bnb-4bit",` `"unsloth/gemma-7b-bnb-4bit",` `"unsloth/gemma-7b-it-bnb-4bit", # Instruct version of Gemma 7b` `"unsloth/gemma-2b-bnb-4bit",` `"unsloth/gemma-2b-it-bnb-4bit", # Instruct version of Gemma 2b` `"unsloth/llama-3-8b-bnb-4bit", # [NEW] 15 Trillion token Llama-3``] # More models at https://huggingface.co/unsloth`` ``model, tokenizer = FastLanguageModel.from_pretrained(` `model_name = "unsloth/llama-3-8b-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``)
此处需下载模型,约需要几分钟,耐心等待即可。出现下图既完成。
九、继续
粘贴下方代码,并点击“小三角”运行代码
model = FastLanguageModel.get_peft_model(` `model,` `r = 16, # Choose any number > 0 ! Suggested 8, 16, 32, 64, 128` `target_modules = ["q_proj", "k_proj", "v_proj", "o_proj",` `"gate_proj", "up_proj", "down_proj",],` `lora_alpha = 16,` `lora_dropout = 0, # Supports any, but = 0 is optimized` `bias = "none", # Supports any, but = "none" is optimized` `# [NEW] "unsloth" uses 30% less VRAM, fits 2x larger batch sizes!` `use_gradient_checkpointing = "unsloth", # True or "unsloth" for very long context` `random_state = 3407,` `use_rslora = False, # We support rank stabilized LoRA` `loftq_config = None, # And LoftQ``)
十、下载数据集
这一步中的第26行代码,"yahma/alpaca-cleaned"就是我们用来训练的数据集。为了方便快速体验,使用的数据集是被托管在Hugging Face上的一个公开的数据集。数据集大概是下图的样子,这是我经过网页翻译的页面。
后续,我也会分享一些公开数据集的网站、还有数据集文件供大家学习使用。
复制下方代码,粘贴进入,并执行:
alpaca_prompt = """Below is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request.`` ``### Instruction:``{}`` ``### Input:``{}`` ``### Response:``{}"""`` ``EOS_TOKEN = tokenizer.eos_token # Must add EOS_TOKEN``def formatting_prompts_func(examples):` `instructions = examples["instruction"]` `inputs = examples["input"]` `outputs = examples["output"]` `texts = []` `for instruction, input, output in zip(instructions, inputs, outputs):` `# Must add EOS_TOKEN, otherwise your generation will go on forever!` `text = alpaca_prompt.format(instruction, input, output) + EOS_TOKEN` `texts.append(text)` `return { "text" : texts, }``pass`` ``from datasets import load_dataset``dataset = load_dataset("yahma/alpaca-cleaned", split = "train")``dataset = dataset.map(formatting_prompts_func, batched = True,)
十一、继续进行一些训练配置
from trl import SFTTrainer``from transformers import TrainingArguments`` ``trainer = SFTTrainer(` `model = model,` `tokenizer = tokenizer,` `train_dataset = dataset,` `dataset_text_field = "text",` `max_seq_length = max_seq_length,` `dataset_num_proc = 2,` `packing = False, # Can make training 5x faster for short sequences.` `args = TrainingArguments(` `per_device_train_batch_size = 2,` `gradient_accumulation_steps = 4,` `warmup_steps = 5,` `max_steps = 60,` `learning_rate = 2e-4,` `fp16 = not torch.cuda.is_bf16_supported(),` `bf16 = torch.cuda.is_bf16_supported(),` `logging_steps = 1,` `optim = "adamw_8bit",` `weight_decay = 0.01,` `lr_scheduler_type = "linear",` `seed = 3407,` `output_dir = "outputs",` `),``)
十二、使用数据集执行训练
trainer_stats = trainer.train()
十三、继续:
# alpaca_prompt = Copied from above``FastLanguageModel.for_inference(model) # Enable native 2x faster inference``inputs = tokenizer(``[` `alpaca_prompt.format(` `"Continue the fibonnaci sequence.", # instruction` `"1, 1, 2, 3, 5, 8", # input` `"", # output - leave this blank for generation!` `)``], return_tensors = "pt").to("cuda")`` ``outputs = model.generate(**inputs, max_new_tokens = 64, use_cache = True)``tokenizer.batch_decode(outputs)
十四、继续
# alpaca_prompt = Copied from above``FastLanguageModel.for_inference(model) # Enable native 2x faster inference``inputs = tokenizer(``[` `alpaca_prompt.format(` `"Continue the fibonnaci sequence.", # instruction` `"1, 1, 2, 3, 5, 8", # input` `"", # output - leave this blank for generation!` `)``], return_tensors = "pt").to("cuda")`` ``from transformers import TextStreamer``text_streamer = TextStreamer(tokenizer)``_ = model.generate(**inputs, streamer = text_streamer, max_new_tokens = 128)
十五、完成训练
已经完成了全部的配置和训练,你已经可以在线使用他了。
十六、体验问答
以下是执行代码,我使用数据集里的一个问题进行了提问,让他为小说《麦田里的守望者》写一篇短评,你也可以更改问题,尝试一下。
if False:` `from unsloth import FastLanguageModel` `model, tokenizer = FastLanguageModel.from_pretrained(` `model_name = "lora_model", # YOUR MODEL YOU USED FOR TRAINING` `max_seq_length = max_seq_length,` `dtype = dtype,` `load_in_4bit = load_in_4bit,` `)` `FastLanguageModel.for_inference(model) # Enable native 2x faster inference`` ``# alpaca_prompt = You MUST copy from above!`` ``inputs = tokenizer(``[` `alpaca_prompt.format(` `"为小说《麦田里的守望者》写一篇短评", # instruction` `"", # input` `"", # output - leave this blank for generation!` `)``], return_tensors = "pt").to("cuda")`` ``outputs = model.generate(**inputs, max_new_tokens = 300, use_cache = True)``tokenizer.batch_decode(outputs)
输出回答:
可以看到执行步骤都非常的简单,当我们真实的需要去应用和训练时,简单的微调,也只需要了解和修改对应的参数和配置即可。
这里(https://huggingface.co/datasets)有非常多的数据集,大家有兴趣可以自行尝试,使用别的数据集进行训练。
如何学习大模型 AGI ?
由于新岗位的生产效率,要优于被取代岗位的生产效率,所以实际上整个社会的生产效率是提升的。
但是具体到个人,只能说是:
“最先掌握AI的人,将会比较晚掌握AI的人有竞争优势”。
这句话,放在计算机、互联网、移动互联网的开局时期,都是一样的道理。
我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。
我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。
-END-
👉AGI大模型学习路线汇总👈
大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)
第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;
第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;
第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;
第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;
第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;
第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;
第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。
👉AGI大模型实战案例👈
光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
👉AGI大模型视频和PDF合集👈
观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;
• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;
• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;
• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。
👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费
】🆓