当前位置: 首页 > news >正文

你们网站做301南昌专业网站制作公司

你们网站做301,南昌专业网站制作公司,wordpress single.php,东莞出行政策有变了本文将介绍使用LoRa在本地机器上微调Alpaca和LLaMA#xff0c;我们将介绍在特定数据集上对Alpaca LoRa进行微调的整个过程#xff0c;本文将涵盖数据处理、模型训练和使用流行的自然语言处理库(如Transformers和hugs Face)进行评估。此外还将介绍如何使用grado应用程序部署和…本文将介绍使用LoRa在本地机器上微调Alpaca和LLaMA我们将介绍在特定数据集上对Alpaca LoRa进行微调的整个过程本文将涵盖数据处理、模型训练和使用流行的自然语言处理库(如Transformers和hugs Face)进行评估。此外还将介绍如何使用grado应用程序部署和测试模型。 配置 首先alpaca-lora1 GitHub存储库提供了一个脚本(finetune.py)来训练模型。在本文中我们将利用这些代码并使其在Google Colab环境中无缝地工作。 首先安装必要的依赖: !pip install -U pip!pip install accelerate0.18.0!pip install appdirs1.4.4!pip install bitsandbytes0.37.2!pip install datasets2.10.1!pip install fire0.5.0!pip install githttps://github.com/huggingface/peft.git!pip install githttps://github.com/huggingface/transformers.git!pip install torch2.0.0!pip install sentencepiece0.1.97!pip install tensorboardX2.6!pip install gradio3.23.0安装完依赖项后继续导入所有必要的库并为matplotlib绘图配置设置: import transformersimport textwrapfrom transformers import LlamaTokenizer, LlamaForCausalLMimport osimport sysfrom typing import Listfrom peft import (LoraConfig,get_peft_model,get_peft_model_state_dict,prepare_model_for_int8_training,)import fireimport torchfrom datasets import load_datasetimport pandas as pdimport matplotlib.pyplot as pltimport matplotlib as mplimport seaborn as snsfrom pylab import rcParams%matplotlib inlinesns.set(rc{figure.figsize:(10, 7)})sns.set(rc{figure.dpi:100})sns.set(stylewhite, palettemuted, font_scale1.2)DEVICE cuda if torch.cuda.is_available() else cpuDEVICE数据 我们这里使用BTC Tweets Sentiment dataset4该数据可在Kaggle上获得包含大约50,000条与比特币相关的tweet。为了清理数据删除了所有以“转发”开头或包含链接的推文。 使用Pandas来加载CSV: df pd.read_csv(bitcoin-sentiment-tweets.csv)df.head()通过清理的数据集有大约1900条推文。 情绪标签用数字表示其中-1表示消极情绪0表示中性情绪1表示积极情绪。让我们看看它们的分布: df.sentiment.value_counts()# 0.0 860# 1.0 779# -1.0 258# Name: sentiment, dtype: int64数据量差不多虽然负面评论较少但是可以简单的当成平衡数据来对待 df.sentiment.value_counts().plot(kindbar);构建JSON数据集 原始Alpaca存储库中的dataset5格式由一个JSON文件组成该文件具有具有指令、输入和输出字符串的对象列表。 让我们将Pandas的DF转换为一个JSON文件该文件遵循原始Alpaca存储库中的格式: def sentiment_score_to_name(score: float):if score 0:return Positiveelif score 0:return Negativereturn Neutraldataset_data [{instruction: Detect the sentiment of the tweet.,input: row_dict[tweet],output: sentiment_score_to_name(row_dict[sentiment])}for row_dict in df.to_dict(orientrecords)]dataset_data[0]结果如下 {instruction: Detect the sentiment of the tweet.,input: p0nd3ea Bitcoin wasnt built to live on exchanges.,output: Positive}然后就是保存生成的JSON文件以便稍后使用它来训练模型: import jsonwith open(alpaca-bitcoin-sentiment-dataset.json, w) as f:json.dump(dataset_data, f)模型权重 虽然原始的Llama模型权重不可用但它们被泄露并随后被改编用于HuggingFace Transformers库。我们将使用decapoda-research6: BASE_MODEL decapoda-research/llama-7b-hfmodel LlamaForCausalLM.from_pretrained(BASE_MODEL,load_in_8bitTrue,torch_dtypetorch.float16,device_mapauto,)tokenizer LlamaTokenizer.from_pretrained(BASE_MODEL)tokenizer.pad_token_id (0 # unk. we want this to be different from the eos token)tokenizer.padding_side left这段代码使用来自Transformers库的LlamaForCausalLM类加载预训练的Llama 模型。load_in_8bitTrue参数使用8位量化加载模型以减少内存使用并提高推理速度。 代码还使用LlamaTokenizer类为同一个Llama模型加载标记器并为填充标记设置一些附加属性。具体来说它将pad_token_id设置为0以表示未知的令牌并将padding_side设置为“left”以填充左侧的序列。 数据集加载 现在我们已经加载了模型和标记器下一步就是加载之前保存的JSON文件使用HuggingFace数据集库中的load_dataset()函数: data load_dataset(json, data_filesalpaca-bitcoin-sentiment-dataset.json)data[train]结果如下 Dataset({features: [instruction, input, output],num_rows: 1897})接下来我们需要从加载的数据集中创建提示并标记它们: def generate_prompt(data_point):return fBelow is an instruction that describes a task, paired with an input that provides further context. Write a response that appropriately completes the request. # noqa: E501### Instruction:{data_point[instruction]}### Input:{data_point[input]}### Response:{data_point[output]}def tokenize(prompt, add_eos_tokenTrue):result tokenizer(prompt,truncationTrue,max_lengthCUTOFF_LEN,paddingFalse,return_tensorsNone,)if (result[input_ids][-1] ! tokenizer.eos_token_idand len(result[input_ids]) CUTOFF_LENand add_eos_token):result[input_ids].append(tokenizer.eos_token_id)result[attention_mask].append(1)result[labels] result[input_ids].copy()return resultdef generate_and_tokenize_prompt(data_point):full_prompt generate_prompt(data_point)tokenized_full_prompt tokenize(full_prompt)return tokenized_full_prompt第一个函数generate_prompt从数据集中获取一个数据点并通过组合指令、输入和输出值来生成提示。第二个函数tokenize接收生成的提示并使用前面定义的标记器对其进行标记。它还向输入序列添加序列结束标记并将标签设置为与输入序列相同。第三个函数generate_and_tokenize_prompt结合了前两个函数生成并标记提示。 数据准备的最后一步是将数据集分成单独的训练集和验证集: train_val data[train].train_test_split(test_size200, shuffleTrue, seed42)train_data (train_val[train].map(generate_and_tokenize_prompt))val_data (train_val[test].map(generate_and_tokenize_prompt))我们还需要数据进行打乱并且获取200个样本作为验证集。generate_and_tokenize_prompt()函数应用于训练和验证集中的每个示例生成标记化的提示。 训练 训练过程需要几个参数这些参数主要来自原始存储库中的微调脚本: LORA_R 8LORA_ALPHA 16LORA_DROPOUT 0.05LORA_TARGET_MODULES [q_proj,v_proj,]BATCH_SIZE 128MICRO_BATCH_SIZE 4GRADIENT_ACCUMULATION_STEPS BATCH_SIZE // MICRO_BATCH_SIZELEARNING_RATE 3e-4TRAIN_STEPS 300OUTPUT_DIR experiments下面就可以为训练准备模型了: model prepare_model_for_int8_training(model)config LoraConfig(rLORA_R,lora_alphaLORA_ALPHA,target_modulesLORA_TARGET_MODULES,lora_dropoutLORA_DROPOUT,biasnone,task_typeCAUSAL_LM,)model get_peft_model(model, config)model.print_trainable_parameters()#trainable params: 4194304 || all params: 6742609920 || trainable%: 0.06220594176090199我们使用LORA算法初始化并准备模型进行训练通过量化可以减少模型大小和内存使用而不会显着降低准确性。 LoraConfig7是一个为LORA算法指定超参数的类例如正则化强度(lora_alpha)、dropout概率(lora_dropout)和要压缩的目标模块(target_modules)。 然后就可以直接使用Transformers库进行训练 training_arguments transformers.TrainingArguments(per_device_train_batch_sizeMICRO_BATCH_SIZE,gradient_accumulation_stepsGRADIENT_ACCUMULATION_STEPS,warmup_steps100,max_stepsTRAIN_STEPS,learning_rateLEARNING_RATE,fp16True,logging_steps10,optimadamw_torch,evaluation_strategysteps,save_strategysteps,eval_steps50,save_steps50,output_dirOUTPUT_DIR,save_total_limit3,load_best_model_at_endTrue,report_totensorboard)这段代码创建了一个TrainingArguments对象该对象指定用于训练模型的各种设置和超参数。这些包括: gradient_accumulation_steps:在执行向后/更新之前累积梯度的更新步数。warmup_steps:优化器的预热步数。max_steps:要执行的训练总数。learning_rate:学习率。fp16:使用16位精度进行训练。 DataCollatorForSeq2Seq是transformer库中的一个类它为序列到序列(seq2seq)模型创建一批输入/输出序列。在这段代码中DataCollatorForSeq2Seq对象用以下参数实例化: data_collator transformers.DataCollatorForSeq2Seq(tokenizer, pad_to_multiple_of8, return_tensorspt, paddingTrue)pad_to_multiple_of:表示最大序列长度的整数四舍五入到最接近该值的倍数。 padding:一个布尔值指示是否将序列填充到指定的最大长度。 以上就是训练的所有代码准备下面就是训练了 trainer transformers.Trainer(modelmodel,train_datasettrain_data,eval_datasetval_data,argstraining_arguments,data_collatordata_collator)model.config.use_cache Falseold_state_dict model.state_dictmodel.state_dict (lambda self, *_, **__: get_peft_model_state_dict(self, old_state_dict())).__get__(model, type(model))model torch.compile(model)trainer.train()model.save_pretrained(OUTPUT_DIR)在实例化训练器之后代码在模型的配置中将use_cache设置为False并使用get_peft_model_state_dict()函数为模型创建一个state_dict该函数为使用低精度算法进行训练的模型做准备。 然后在模型上调用torch.compile()函数该函数编译模型的计算图并准备使用PyTorch 2进行训练。 训练过程在A100上持续了大约2个小时。我们看一下Tensorboard上的结果: 训练损失和评估损失呈稳步下降趋势。看来我们的微调是有效的。 如果你想将模型上传到Hugging Face上可以使用下面代码 from huggingface_hub import notebook_loginnotebook_login()model.push_to_hub(curiousily/alpaca-bitcoin-tweets-sentiment, use_auth_tokenTrue)推理 我们可以使用generate.py脚本来测试模型: !git clone https://github.com/tloen/alpaca-lora.git%cd alpaca-lora!git checkout a48d947我们的脚本启动的gradio应用程序 !python generate.py \--load_8bit \--base_model decapoda-research/llama-7b-hf \--lora_weights curiousily/alpaca-bitcoin-tweets-sentiment \--share_gradio简单的界面如下 总结 我们已经成功地使用LoRa方法对Llama 模型进行了微调还演示了如何在Gradio应用程序中使用它。 如果你对本文感兴趣请看原文 https://avoid.overfit.cn/post/34b6eaf7097a4929b9aab7809f3cfeaa
http://www.pierceye.com/news/853552/

相关文章:

  • 忻州网站制作jsp小型网站开发代码
  • 如何外贸网站推广wordpress默认主题哪个好
  • 设计网站推荐提升审美网站建设的公司
  • 张浦专业做网站网站建设案例百度云
  • 佛山网站如何制作网站建设公司哪家强
  • 韩城市网站建设编程培训机构加盟哪家好
  • 已备案网站更换域名广东工厂网站建设
  • 营销型网站有哪些特点建设官方网站的费用账务处理
  • 区域网站设计WordPress无法发布
  • html网站开发主要涉及哪些技术百度域名的ip
  • 织梦网站数据下载wordpress如何播放百度云视频
  • 建站的费用服务器搭建网站环境
  • 查看公司信息的网站旅游网站效果图
  • 娄底网站制作重庆专题片制作
  • 网站建设佰金手指科杰十七织梦淘客网站
  • 财务系统seo西安
  • 如何做好网站建设的关键重点网站地图那么建设
  • 打开山东城市建设职业学院网站自己网站做优化的有权利卖么
  • 境外电商网站建设sem推广优化
  • 五站合一自建网站制作网站用什么软件有哪些
  • 查法人信息的网站开发公司一季度汇报
  • 国外的购物网站有哪些安徽省住房和城乡建设厅官方网站
  • 网站策划需要什么能力网页游戏平台软件
  • phpmysql网站开发网络结构
  • 微官网和移动网站区别论坛网站建设多少钱
  • 怎么做公司网站优化凡科h5登录入口
  • 做电影网站如何推广方案房产网络平台
  • 站长工具 seo查询python爬数据做网站
  • 网站 底部医院网站建设的要求
  • asp网站静态化seo关键词排名优化软件怎么选