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

做网站还能赚钱苏州知名网站建设建站公司

做网站还能赚钱,苏州知名网站建设建站公司,织梦pc怎么做手机网站,北京办公室装修【Python】科研代码学习#xff1a;八 FineTune PretrainedModel [用 trainer#xff0c;用 script] LLM文本生成 自己整理的 HF 库的核心关系图用 trainer 来微调一个预训练模型用 script 来做训练任务使用 LLM 做生成任务可能犯的错误#xff0c;以及解决措施 自己整理的 … 【Python】科研代码学习八 FineTune PretrainedModel [用 trainer用 script] LLM文本生成 自己整理的 HF 库的核心关系图用 trainer 来微调一个预训练模型用 script 来做训练任务使用 LLM 做生成任务可能犯的错误以及解决措施 自己整理的 HF 库的核心关系图 根据前面几期自己整理的核心库的使用/继承关系 用 trainer 来微调一个预训练模型 HF官网APIFT a PretrainedModel 今天讲讲FT训练相关的内容吧 这里就先不提用 keras 或者 native PyTorch 微调直接看一下用 trainer 微调的基本流程第一步加载数据集和数据集预处理 使用 datasets 进行加载 HF 数据集 from datasets import load_datasetdataset load_dataset(yelp_review_full)另外需要用 tokenizer 进行分词。自定义分词函数然后使用 dataset.map() 可以把数据集进行分词。 from transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained(google-bert/bert-base-cased)def tokenize_function(examples):return tokenizer(examples[text], paddingmax_length, truncationTrue)tokenized_datasets dataset.map(tokenize_function, batchedTrue)也可以先选择其中一小部分的数据单独拿出来做测试或者其他任务 small_train_dataset tokenized_datasets[train].shuffle(seed42).select(range(1000)) small_eval_dataset tokenized_datasets[test].shuffle(seed42).select(range(1000))第二步加载模型选择合适的 AutoModel 或者比如具体的 LlamaForCausalLM 等类。 使用 model.from_pretrained() 加载 from transformers import AutoModelForSequenceClassificationmodel AutoModelForSequenceClassification.from_pretrained(google-bert/bert-base-cased, num_labels5)第三步加载 / 创建训练参数 TrainingArguments from transformers import TrainingArgumentstraining_args TrainingArguments(output_dirtest_trainer)第四步指定评估指标。trainer 在训练的时候不会去自动评估模型的性能/指标所以需要自己提供一个 ※ 这个 evaluate 之前漏了放后面学这里先摆一下 # TODO import numpy as np import evaluatemetric evaluate.load(accuracy)第五步使用 trainer 训练提供之前你创建好的 model模型args训练参数train_dataset训练集eval_dataset验证集compute_metrics评估方法 trainer Trainer(modelmodel,argstraining_args,train_datasetsmall_train_dataset,eval_datasetsmall_eval_dataset,compute_metricscompute_metrics, ) trainer.train()完整代码请替换其中的必要参数来是配置自己的模型和任务 from datasets import load_dataset from transformers import (LlamaTokenizer,LlamaForCausalLM,TrainingArguments,Trainer,) import numpy as np import evaluatedef tokenize_function(examples):return tokenizer(examples[text], paddingmax_length, truncationTrue)metric evaluate.load(accuracy) def compute_metrics(eval_pred):logits, labels eval_predpredictions np.argmax(logits, axis-1)return metric.compute(predictionspredictions, referenceslabels) Load dataset, tokenizer, model, training args preprosess into tokenized dataset split training dataset and eval datasetdataset load_dataset(xxxxxxxxxxxxxxxxxxxx)tokenizer LlamaTokenizer.from_pretrained(xxxxxxxxxxxxxxxxxxxxxxxxxx) tokenized_datasets dataset.map(tokenize_function, batchedTrue)small_train_dataset tokenized_datasets[train].shuffle(seed42).select(range(1000)) small_eval_dataset tokenized_datasets[test].shuffle(seed42).select(range(1000))model LlamaForCausalLM.from_pretrained(xxxxxxxxxxxxxxx)training_args TrainingArguments(output_dirxxxxxxxxxxxxxx) define metrics set trainer and train trainer Trainer(modelmodel,argstraining_args,train_datasetsmall_train_dataset,eval_datasetsmall_eval_dataset,compute_metricscompute_metrics, )trainer.train()用 script 来做训练任务 我们在很多项目中都会看到启动脚本是一个 .sh 文件一般里面可能会这么写 python examples/pytorch/summarization/run_summarization.py \--model_name_or_path google-t5/t5-small \--do_train \--do_eval \--dataset_name cnn_dailymail \--dataset_config 3.0.0 \--source_prefix summarize: \--output_dir /tmp/tst-summarization \--per_device_train_batch_size4 \--per_device_eval_batch_size4 \--overwrite_output_dir \--predict_with_generate或者最近看到的一个 OUTPUT_DIR${1:-./alma-7b-dpo-ft} pairs${2:-de-en,cs-en,is-en,zh-en,ru-en,en-de,en-cs,en-is,en-zh,en-ru} export HF_DATASETS_CACHE.cache/huggingface_cache/datasets export TRANSFORMERS_CACHE.cache/models/ # random port between 30000 and 50000 port$(( RANDOM % (50000 - 30000 1 ) 30000 ))accelerate launch --main_process_port ${port} --config_file configs/deepspeed_train_config_bf16.yaml \run_cpo_llmmt.py \--model_name_or_path haoranxu/ALMA-13B-Pretrain \--tokenizer_name haoranxu/ALMA-13B-Pretrain \--peft_model_id haoranxu/ALMA-13B-Pretrain-LoRA \--cpo_scorer kiwi_xcomet \--cpo_beta 0.1 \--use_peft \--use_fast_tokenizer False \--cpo_data_path haoranxu/ALMA-R-Preference \--do_train \--language_pairs ${pairs} \--low_cpu_mem_usage \--bf16 \--learning_rate 1e-4 \--weight_decay 0.01 \--gradient_accumulation_steps 1 \--lr_scheduler_type inverse_sqrt \--warmup_ratio 0.01 \--ignore_pad_token_for_loss \--ignore_prompt_token_for_loss \--per_device_train_batch_size 2 \--evaluation_strategy no \--save_strategy steps \--save_total_limit 1 \--logging_strategy steps \--logging_steps 0.05 \--output_dir ${OUTPUT_DIR} \--num_train_epochs 1 \--predict_with_generate \--prediction_loss_only \--max_new_tokens 256 \--max_source_length 256 \--seed 42 \--overwrite_output_dir \--report_to none \--overwrite_cache 玛雅这么多 --xxx 看着头疼也不知道怎么搞出来这么多参数作为启动文件的。 这种就是通过 script 启动任务了githubtransformers/examples 看一下 HF github 给的一些任务的 examples 学习例子就会发现 在 main 函数中会有这样的代码 这个就是通过 argparser 来获取参数 貌似还有 parser 和 HfArgumentParser这些都可以打包解析参数又是挖个坑 # TODO 这样的话就可以通过 .sh 来在启动脚本中提供相关参数了 def main():parser argparse.ArgumentParser()parser.add_argument(--model_type,defaultNone,typestr,requiredTrue,helpModel type selected in the list: , .join(MODEL_CLASSES.keys()),)parser.add_argument(--model_name_or_path,defaultNone,typestr,requiredTrue,helpPath to pre-trained model or shortcut name selected in the list: , .join(MODEL_CLASSES.keys()),)parser.add_argument(--prompt, typestr, default)parser.add_argument(--length, typeint, default20)parser.add_argument(--stop_token, typestr, defaultNone, helpToken at which text generation is stopped)# ....... 太长省略用脚本启动还有什么好处呢 可以使用 accelerate launch run_summarization_no_trainer.py 进行加速训练 再给 accelerate 挖个坑 # TODO所以在 .sh script 启动脚本中具体能提供哪些参数取决于这个入口 .py 文件的 parser 打包解析了哪些参数然后再利用这些参数做些事情。 使用 LLM 做生成任务 HF官网APIGeneration with LLMs 官方都特地给这玩意儿单独开了一节就说明其中有些很容易踩的坑…对于 CausalLM首先看一下 next token 的生成逻辑输入进行分词与嵌入后通过多层网络然后进入到一个LM头最终获得下一个 token 的概率预测那么生成句子的逻辑就是不断重复这个过程获得 next token 概率预测后通过一定的算法选择下一个 token然后再重复该操作就能生成整个句子了。那什么时候停止呢要么是下一个token选择了 eos要么是到达了之前定义的 max token length 接下来看一下代码逻辑第一步加载模型 device_map控制模型加载在 GPUs上不过一般我会使用 os.environ[CUDA_DEVICE_ORDER] PCI_BUS_ID 以及 os.environ[CUDA_VISIBLE_DEVICES] 1,2 load_in_4bit 设置加载量化 from transformers import AutoModelForCausalLMmodel AutoModelForCausalLM.from_pretrained(mistralai/Mistral-7B-v0.1, device_mapauto, load_in_4bitTrue )第二步加载分词器和分词 记得分词的向量需要加载到 cuda 中 from transformers import AutoTokenizertokenizer AutoTokenizer.from_pretrained(mistralai/Mistral-7B-v0.1, padding_sideleft) model_inputs tokenizer([A list of colors: red, blue], return_tensorspt).to(cuda)但这个是否需要分词取决于特定的 model.generate() 方法的参数 就比如 disc 模型的 generate() 方法的参数为 也就是说我输入的 prompt 只用提供字符串即可又不需要进行分词或者分词器了。 第三步通常的 generate 方法输入是 tokenized 后的数组然后获得 ids 之后再 decode 变成对应的字符结果 generated_ids model.generate(**model_inputs) tokenizer.batch_decode(generated_ids, skip_special_tokensTrue)[0]当然我也可以批处理一次做多个操作批处理需要设置pad_token tokenizer.pad_token tokenizer.eos_token # Most LLMs dont have a pad token by default model_inputs tokenizer([A list of colors: red, blue, Portugal is], return_tensorspt, paddingTrue ).to(cuda) generated_ids model.generate(**model_inputs) tokenizer.batch_decode(generated_ids, skip_special_tokensTrue)可能犯的错误以及解决措施 控制输出句子的长度 需要在 generate 方法中提供 max_new_tokens 参数 model_inputs tokenizer([A sequence of numbers: 1, 2], return_tensorspt).to(cuda)# By default, the output will contain up to 20 tokens generated_ids model.generate(**model_inputs) tokenizer.batch_decode(generated_ids, skip_special_tokensTrue)[0]# Setting max_new_tokens allows you to control the maximum length generated_ids model.generate(**model_inputs, max_new_tokens50) tokenizer.batch_decode(generated_ids, skip_special_tokensTrue)[0]生成策略修改 有时候默认使用贪心策略来获取 next token这个时候容易出问题循环生成等需要设置 do_sampleTrue pad 对齐方向 如果输入不等长那么会进行pad操作 由于默认是右侧padding而LLM在训练时没有学会从pad_token接下来的生成策略所以会出问题 所以需要设置 padding_sideleft![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/6084ff91d85c49e28a4faf498b8e5997.png) 如果没有使用正确的 prompt比如训练时的prompt格式得到的结果就会不如预期 (in one sitting 一口气) (thug 暴徒) 这里需要参考 HF对话模型的模板 以及 HF LLM prompt 指引 比如说QA的模板就像这样。 更高级的还有 few shot 和 COT 技巧。 torch.manual_seed(4) prompt Answer the question using the context below. Context: Gazpacho is a cold soup and drink made of raw, blended vegetables. Most gazpacho includes stale bread, tomato, cucumbers, onion, bell peppers, garlic, olive oil, wine vinegar, water, and salt. Northern recipes often include cumin and/or pimentón (smoked sweet paprika). Traditionally, gazpacho was made by pounding the vegetables in a mortar with a pestle; this more laborious method is still sometimes used as it helps keep the gazpacho cool and avoids the foam and silky consistency of smoothie versions made in blenders or food processors. Question: What modern tool is used to make gazpacho? Answer: sequences pipe(prompt,max_new_tokens10,do_sampleTrue,top_k10,return_full_text False, )for seq in sequences:print(fResult: {seq[generated_text]})
http://www.pierceye.com/news/620522/

相关文章:

  • 网站建设专业培训网站开发网页加载缓慢查询数据库慢
  • 网站开发中 视频播放卡做soho建立网站
  • 面试网站开发员安徽建工集团网站
  • 公司制作网站价格表app系统开发费用
  • 网站建设需要学什么h5海报是怎么做出来的
  • 西平企业网站建设美媒中国或已建立了51区
  • 柯城区住房和城乡建设局网站免费搭建淘宝客网站
  • 低价机票 网站建设网站模板
  • 手机网站建设的教程视频做的网站怎么放在网上
  • 做视频网站视频空间设计是什么
  • 怎么把网站推广wordpress 百万数据
  • 乐陵市人力资源中心网站网站的内容和功能
  • wordpress网站搬家图片路径做网站的算什么行业
  • 个人网站logo重庆网络优化平台
  • 河南 网站建设静态网站是什么意思
  • 上海正规做网站公司电话基于flash网站设计
  • 每个城市建设规划在哪个网站wordpress 无法安装主题
  • 自建网站做外贸谷歌推广网站内部资源推广方法
  • 网站数据库5g一个人看的免费视频高清直播
  • 怎么做网站注册推广泰州网站建设费用
  • 找南阳建立网站的公司网址大全最新版的
  • 网站建设与维护就业前景小程序开发外包注意事项
  • 胶州网站建设哪里有天润网站建设
  • 网站备案 怎么加搜索引擎网站建设
  • 做外贸自己开公司网站网站建设三个友好
  • 深圳高端品牌网站设计网站建设实训报告收获
  • 万虹点读机如何做系统下载网站网站seo的重要性
  • 同一家公司可以做几个网站吗铁岭网站开发公司
  • 网站推广费用大概需要多少钱个人二级网站怎么做
  • 查询企业的网站有哪些山东平台网站建设找哪家