最近,随着大语言模型和AI的兴起,我们看到了自然语言处理方面的无数进步。文本,代码和图像/视频生成等域中的模型具有归档的人类的推理和性能。这些模型在基于知识的问题中表现出色。 GPT-4O,Llama 2,Claude和Gemini之类的模型在公开可用的数据集上进行了培训。他们未能回答可能对各种组织任务更有用的领域或特定于主题的问题。
微观调整可帮助开发人员和企业适应并训练预培训的模型,以适用于特定于域的数据集,该数据集对与域相关的查询进行了高度准确性和相干性。微调可以增强模型的性能,而无需大量的计算资源,因为预训练的模型已经从广泛的公共数据中学到了一般文本。
该博客将研究为什么我们必须使用Lamini平台微调预训练的模型。这使我们可以在不使用大量计算资源的情况下微调和评估模型。
所以,让我们开始吧!
学习目标
- 探索使用tofine-tune开源LLM的需求
- 找出使用拉米尼的使用以及在微调模型上的指示下
- 为了动手了解微调模型的端到端过程。
本文作为Thedata Science Blogathon的一部分发表。
目录
- 学习目标
- 为什么要一种微型语言模型?
- 如何使用Lamini微调开源LLM?
- 数据准备
- 标记数据集
- 微调过程
- 设置环境
- 加载数据集
- 设置培训进行微调,模型
- 结论
- 常见问题
为什么要一种微型语言模型?
预先训练的模型主要是对庞大的一般数据进行培训的,并且很有可能缺乏上下文或特定领域知识。预训练的模型也可能导致幻觉以及不准确和不连贯的输出。最受欢迎的大型语言模型基于聊天机器人,例如Chatgpt,Gemini和Bingchat,它反复表明,预训练的模型容易出现这种不准确性。这是救援进行微调的地方,这可以有助于有效地适应特定于主题的任务和问题。将模型与您的目标保持一致的其他方法包括及时的工程和少量及时工程。
尽管如此,在性能指标方面,微调仍然表现优于表现。诸如参数有效的微调和低自适应排名诸如诸如模型的微调和低自适应排名的方法之类的方法进一步改进了模型,并帮助开发人员生成了更好的模型。让我们看一下微调在大型语言模型上下文中的适合程度。
#加载微调数据集 文件名=“ lamini_docs.json” conterction_dataset_df = pd.read_json(文件名,lines = true) 指令_dataset_df #将其加载到Python的词典中 示例=指令_dataset_df.to_dict() #准备样品以进行微调 如果在示例中“问题”和示例中的“答案”: text =示例[“问题”] [0]示例[“答案”] [0] 示例中的elif“指示”和“响应”示例: text =示例[“指令”] [0]示例[“响应”] [0] 示例中的elif“输入”和示例中的“输出”: text =示例[“输入”] [0]示例[“输出”] [0] 别的: text =示例[“ text”] [0] #使用提示模板创建指令调谐数据集进行微调 提示_template_qa =“” ###问题: {问题} ### 回答: {回答}”””
上面的代码显示,指令调整使用提示模板来准备数据集进行指令调整并微调特定数据集的模型。我们可以使用此类自定义数据集将预训练的模型调整为特定的用例。
下一节将研究Lamini如何为自定义数据集提供微型语言模型(LLM)。
如何使用Lamini微调开源LLM?
Lamini平台使用户可以无缝地进行微调和部署模型,而无需太多的成本和硬件设置要求。 Lamini提供了一个端到端的堆栈,可在用户方便和模型要求下开发,训练,调整,E和部署模型。 Lamini提供了自己的托管GPU计算网络,以经济有效地培训模型。
Lamini内存调整工具和计算优化有助于训练和调整模型,同时控制成本。模型可以在任何地方,私有云或通过Lamini的GPU网络托管。接下来,我们将看到一份逐步指南,使用Lamini平台准备数据以微调大语言模型(LLMS)。
数据准备
通常,我们需要选择一个特定领域的数据集进行数据清洁,促销,令牌化和存储,以准备任何微调任务的数据。加载数据集后,我们将其进行预处理以将其转换为指令调整的数据集。我们将每个样本从数据集格式化为指令,问和答案格式,以更好地为我们的用例微调。使用此处给出的链接查看数据集的来源。让我们看一下使用Lamini平台进行训练的代币化调整的代码示例说明。
导入大熊猫作为pd #加载数据集并将其作为指令数据集存储 文件名=“ lamini_docs.json” conterction_dataset_df = pd.read_json(文件名,lines = true) 示例=指令_dataset_df.to_dict() 如果在示例中“问题”和示例中的“答案”: text =示例[“问题”] [0]示例[“答案”] [0] 示例中的elif“指示”和“响应”示例: text =示例[“指令”] [0]示例[“响应”] [0] 示例中的elif“输入”和示例中的“输出”: text =示例[“输入”] [0]示例[“输出”] [0] 别的: text =示例[“ text”] [0] 提示_template =“” ###问题: {问题} ### 回答:””” #存储微调示例作为指令格式 num_examples = len(示例[“问题”]) finetuning_dataset = [] 对于我的范围(num_examples): 问题=示例[“问题”] [i] 答案=示例[“答案”] [i] text_with_prompt_template = strump_template.format(Question = Question) finetuning_dataset.append({“问题”:text_with_prompt_template, “答案”:答案})
在上面的示例中,我们在及时的模板中格式化了“问题”和“答案”,并将它们存储在训练LLM之前的单独文件中以进行令牌化和填充。
标记数据集
#带有填充和截断的数据集的象征化 def tokenize_function(示例): 如果在示例中“问题”和示例中的“答案”: text =示例[“问题”] [0]示例[“答案”] [0] 示例中的elif“输入”和示例中的“输出”: text =示例[“输入”] [0]示例[“输出”] [0] 别的: text =示例[“ text”] [0] #填充 tokenizer.pad_token = tokenizer.eos_token tokenized_inputs = tokenizer( 文本, return_tensors =“ np”, 填充= true, ) max_length = min(min tokenized_inputs [“ input_ids”]。形状[1], 2048 ) #文本的截断 tokenizer.truncation_side =“左” tokenized_inputs = tokenizer( 文本, return_tensors =“ np”, 截断= true, max_length = max_length ) 返回tokenized_inputs
上面的代码将数据集样本作为填充和截断的输入,并使用令牌化来生成预处理的令牌化数据集样本,可用于微调预培训的模型。现在,数据集已经准备好了,我们将使用Lamini平台研究模型的培训和评估。
微调过程
现在,我们已经有一个以指令调整格式准备的数据集,我们将使用Lamini的易于使用的培训技巧将数据集加载到环境中,并对预训练的LLM模型进行微调。
设置环境
为了开始使用Lamini进行微调开放式旅行,我们必须首先确保我们的代码环境安装了合适的资源和库。我们必须确保您拥有具有足够GPU资源的合适机器,并安装必要的库,例如变形金刚,数据集,火炬和熊猫。您必须安全地加载环境变量,例如API_URL和API_KEY,通常来自环境文件。您可以使用Dotenv之类的软件包来加载这些变量。准备环境后,加载数据集和培训模型。
导入操作系统 来自拉米尼进口兰米尼 lamini.api_url = os.getEnv(“ powerml__production__url”) lamini.api_key = os.getEnv(“ powerml__production __key”) #导入必要的库并加载环境文件 导入数据集 导入tempfile 导入记录 导入随机 导入config 导入操作系统 导入山药 进口时间 导入火炬 导入变压器 导入大熊猫作为pd 导入jsonlines #加载变压器体系结构和[[ 从公用事业导入 * 从变形金刚导入自动源 从变形金刚导入AutomoDelforCausAllm 从变形金刚进口培训 从变形金刚导入AutomoDelforCausAllm 来自Llama Import Basic Modelrunner logger = logging.getLogger(__名称__) global_config =无
加载数据集
设置监视和调试的日志记录后,请使用数据集或其他数据处理库(例如JSONLINES和PANDAS)准备数据集。加载数据集后,我们将设置一个用于培训过程的培训配置的令牌和模型。
#从您的本地系统或HF云中加载数据集 dataset_name =“ lamini_docs.jsonl” dataset_path = f“/content/{dataset_name}” use_hf = false #数据集路径 dataset_path =“ lamini/lamini_docs”
设置型号,培训配置和令牌器
接下来,我们选择使用lamlamini,“ eleutherai/pythia-70m”进行微调开放式的模型,并在triagn_config下定义其配置,指定预训练的模型名称和数据集路径。我们使用模型的令牌将自动摄影剂初始化,并将填充设置为序列令牌。然后,我们使用自定义功能Tokenize_and_split_data将数据归为数据并将其分为培训和测试数据集。最后,我们使用AutoModelForCausAllm实例化基础模型,使其能够执行因果语言建模任务。此外,以下代码设置了我们的模型微调过程的计算要求。
#模型名称 model_name =“ eleutherai/pythia-70m” #培训配置 triending_config = { “模型”: { “ Pretrained_name”:model_name, “ max_length”:2048 },, “数据集”:{ “ use_hf”:use_hf, “路径”:dataset_path },, “冗长”:是的 } #设置自动令牌 tokenizer = autotokenizer.from_pretaining(model_name) tokenizer.pad_token = tokenizer.eos_token train_dataset,test_dataset = tokenize_and_split_data(triending_config,tokenizer) #从Lamini设置基线型号 base_model = lamini(model_name) #GPU排位 device_count = torch.cuda.device_count() 如果device_count> 0: logger.debug(“选择GPU设备”) 设备= TORCH.DEVICE(“ CUDA”) 别的: logger.debug(“选择CPU设备”) 设备= TORCH.DEVICE(“ CPU”)
设置培训进行微调,模型
最后,我们使用超参数设置培训参数参数。它包括学习率,时期,批处理大小,输出目录,评估步骤,SAV,热身步骤,评估和记录策略等,以微调自定义培训数据集。
max_steps = 3 #受过训练的型号名称 Trained_model_name = f“ lamini_docs_ {max_steps} _steps” output_dir = trained_model_name triending_args = triencharguments( #学习率 Learning_rate = 1.0e-5, #训练时期的数量 num_train_epochs = 1, #最大训练步骤(每个步骤都是一批数据) #覆盖num_train_epochs,如果不是-1 max_steps = max_steps, #培训的批量尺寸 per_device_train_batch_size = 1, #要保存模型检查点的目录 output_dir = output_dir, #其他参数 operwrite_output_dir = false,#覆盖输出目录的内容 disable_tqdm = false,#禁用进度栏 eval_steps = 120,#两个评估之间的更新步骤数 save_steps = 120,#在保存#步骤模型之后 热身_STEPS = 1,#学习率调度程序的热身步骤数 per_device_eval_batch_size = 1,#批次大小进行评估 evaluation_strategy =“ step”, logging_strategy =“ step”, logging_steps = 1, optim =“ adafactor”, gradient_accumulation_steps = 4, gradient_checkpointing = false, #早期停止的参数 load_best_model_at_end = true, save_total_limit = 1, metric_for_best_model =“ eval_loss”, 大_is_better = false )
设置训练参数后,系统根据输入大小和梯度累积步骤计算模型每秒的浮点操作(FLOPS)。从而深入了解计算负载。它还评估记忆使用情况,估计模型在千兆字节中的占地面积。一旦完成这些计算,培训师将初始化基本模型,失败,总培训步骤以及准备好的培训和评估数据集。该设置优化了训练过程并启用资源利用率监控,对于有效处理大规模模型微调至关重要。在培训结束时,微型模型准备在云上部署,以将用户作为API服务。
#模型参数 model_flops =(( base_model.floating_point_ops( { “ input_ids”:torch.zeros( (1,triending_config [“模型”] [“ max_length”]) ) } ) *训练_args.gradient_accumulation_steps ) 打印(base_model) print(“内存足迹”,base_model.get_memory_footprint() / 1E9,“ GB”) 打印(“ Flops”,model_flops / 1e9,“ gflops”) #设立教练 培训师=教练( 型号= base_model, model_flops = model_flops, total_steps = max_steps, args =训练_args, train_dataset = train_dataset, eval_dataset = test_dataset, )
结论
总之,本文提供了深入的指南,以了解使用Lamini平台微调LLM的需求。它全面概述了为什么我们必须为自定义数据集和业务用例以及使用Lamini工具的好处微调模型。我们还看到了使用Lamini的工具使用自定义数据集和LLM微调模型的分步指南。让我们总结一下博客的关键要点。
关键要点
- 针对迅速工程和检索增强生成方法的微调模型需要学习。
- 诸如Lamini之类的平台的Uutilization for易用使用的硬件设置和部署技术,以满足用户需求的微调模型
- 我们正在为微调任务准备数据,并设置管道使用各种超参数训练基本模型。
探索GitHub上本文背后的代码。
本文所示的媒体不由Analytics Vidhya拥有,并由作者酌情使用。
常见问题
Q1。如何微调我的模型?答:微调过程始于理解特定于上下文的要求,数据集准备,代币化以及设置培训设置,例如硬件要求,培训配置和培训参数。最终,进行模型开发的培训工作。
Q2。 LLM的微调是什么意思?答:对LLM进行微调意味着在特定自定义数据集上训练基本模型。每个用例都会为特定查询生成准确且相关的输出。
Q3。 LLM微调中的Lamini是什么?A. Lamini为LLMS的无缝,高效且具有成本效益的开发提供了综合语言模型,推理和GPU设置。
以上是使用Lamini-Analytics Vidhya微调开源LLM的详细内容。更多信息请关注PHP中文网其他相关文章!

利用“设备” AI的力量:建立个人聊天机器人CLI 在最近的过去,个人AI助手的概念似乎是科幻小说。 想象一下科技爱好者亚历克斯(Alex)梦见一个聪明的本地AI同伴 - 不依赖

他们的首届AI4MH发射于2025年4月15日举行,著名的精神科医生兼神经科学家汤姆·因斯尔(Tom Insel)博士曾担任开幕式演讲者。 Insel博士因其在心理健康研究和技术方面的杰出工作而闻名

恩格伯特说:“我们要确保WNBA仍然是每个人,球员,粉丝和公司合作伙伴,感到安全,重视和授权的空间。” anno

介绍 Python擅长使用编程语言,尤其是在数据科学和生成AI中。 在处理大型数据集时,有效的数据操作(存储,管理和访问)至关重要。 我们以前涵盖了数字和ST

潜水之前,一个重要的警告:AI性能是非确定性的,并且特定于高度用法。简而言之,您的里程可能会有所不同。不要将此文章(或任何其他)文章作为最后一句话 - 目的是在您自己的情况下测试这些模型

建立杰出的AI/ML投资组合:初学者和专业人士指南 创建引人注目的投资组合对于确保在人工智能(AI)和机器学习(ML)中的角色至关重要。 本指南为建立投资组合提供了建议

结果?倦怠,效率低下以及检测和作用之间的差距扩大。这一切都不应该令任何从事网络安全工作的人感到震惊。 不过,代理AI的承诺已成为一个潜在的转折点。这个新课

直接影响与长期伙伴关系? 两周前,Openai提出了强大的短期优惠,在2025年5月底之前授予美国和加拿大大学生免费访问Chatgpt Plus。此工具包括GPT-4O,A A A A A


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

螳螂BT
Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SublimeText3 Linux新版
SublimeText3 Linux最新版

SublimeText3汉化版
中文版,非常好用

Atom编辑器mac版下载
最流行的的开源编辑器

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)