EleutherAI GPT-Neo: 穷人的希望

前面一篇blog finetune一个GPT3,借助openai的api finetune了一个GPT3,使用下来确实太贵,生成了1w条数据,花掉了60多美刀。肉痛,所以穷人只能想想穷人的办法,脑子就浮现出好朋友EleutherAI的GPT-Neo来。github上有两个项目GPT-Neo和GPT-NeoX,下图来自高仿也赛高?GPT-Neo真好用

之前一个blog,我是基于openai davinci做的微调,从这个角度来说,根据github上对gpt-neox的描述,得采用GPT-NeoX是最好的选择

We aim to make this repo a centralized and accessible place to gather techniques for training large-scale autoregressive language models, and accelerate research into large-scale training. Additionally, we hope to train and open source a 175B parameter GPT-3 replication along the way. Please note, however, that this is a research codebase that is primarily designed for performance over ease of use. We endeavour to make it as easy to use as is feasible, but if there's anything in the readme that is unclear or you think you've found a bug, please open an issue.

不过这个实在太大,恐怕我的3090没能力撑起这个场子,GPT-Neo也是可以将就将就的。

剩余的也就是准备数据(同之前的json),再写几行简单的finetuning code,网上东拼西凑,再debug一下,获得如下代码,仅供参考。gpt-neo-1.3B 1000条数据finetune 10个周期效果也不够好(train_data_prepared.jsonl),最终我采用openai获得的9000多条数据训练一个周期后,效果就接近openai davinci finetune的结果了。

import sys
import json
import pandas as pd
import torch
from torch.utils.data import Dataset, random_split
from transformers import GPT2Tokenizer, TrainingArguments, Trainer, AutoModelForCausalLM#, GPTNeoXTokenizerFasttorch.manual_seed(42)
modelname = "EleutherAI/gpt-neo-1.3B"
tokenizer = GPT2Tokenizer.from_pretrained(f"{modelname}", bos_token='<|startoftext|>',eos_token='<|endoftext|>', pad_token='<|pad|>')
#special_tokens_dict = {'sep_token': '\n##\n', 'unk_token': '\n%%\n'}
#num_added_toks = tokenizer.add_special_tokens(special_tokens_dict)
#model = GPTNeoXForCausalLM.from_pretrained("EleutherAI/gpt-neox-20b")
#tokenizer = GPTNeoXTokenizerFast.from_pretrained("EleutherAI/gpt-neox-20b")
model = AutoModelForCausalLM.from_pretrained(f"{modelname}").cuda()
for name, param in model.transformer.wte.named_parameters():param.requires_grad = False
for name, param in model.transformer.wpe.named_parameters():param.requires_grad = False
for name, param in model.transformer.h[:16].named_parameters():param.requires_grad = False 
model.resize_token_embeddings(len(tokenizer))
prompts = []
completions = []'''
f = open("train_data_prepared.jsonl", "r")
lines = [line.strip() for line in f.readlines()]
f.close()
for line in lines:data = json.loads(line)if len(data['prompt'].split(' ')) + len(data['completion'].split(' ')) > 45:continueprompts.append(data['prompt'])completions.append(data['completion'])
'''
f = open("prompt_instrcut_completion.txt", "r")
lines = [line.strip() for line in f.readlines()]
f.close()
for line in lines:items = line.split('|')if len(items) != 3:continueprompt,completion = items[0]+"\n##\n",items[1]+"\n%%\n"+items[2]+"\nEND"if len(prompt.split(' ')) + len(completion.split(' ')) > 45:continueprompts.append(prompt)completions.append(completion)max_length = 50
print("prompts length", len(prompts), "max length", max_length)class InstructDataset(Dataset):def __init__(self, prompts, completions, tokenizer, max_length):self.input_ids = []self.attn_masks = []for prompt, completion in zip(prompts, completions):encodings_dict = tokenizer(f'<|startoftext|>prompt:{prompt}\ncompletion:{completion}<|endoftext|>', truncation=True,max_length=max_length, padding="max_length")self.input_ids.append(torch.tensor(encodings_dict['input_ids']))self.attn_masks.append(torch.tensor(encodings_dict['attention_mask']))def __len__(self):return len(self.input_ids)def __getitem__(self, idx):return self.input_ids[idx], self.attn_masks[idx]dataset = InstructDataset(prompts, completions, tokenizer, max_length=max_length)
train_size = int(0.9 * len(dataset))
train_dataset, val_dataset = random_split(dataset, [train_size, len(dataset) - train_size])
training_args = TrainingArguments(output_dir='./results', num_train_epochs=1, logging_steps=400, save_steps=500,per_device_train_batch_size=2, per_device_eval_batch_size=2,warmup_steps=100, weight_decay=0.01, logging_dir='./logs')
Trainer(model=model, args=training_args, train_dataset=train_dataset,eval_dataset=val_dataset, data_collator=lambda data: {'input_ids': torch.stack([f[0] for f in data]),'attention_mask': torch.stack([f[1] for f in data]),'labels': torch.stack([f[0] for f in data])}).train()
generated = tokenizer("<|startoftext|>a dog\n##\n", return_tensors="pt").input_ids.cuda()
sample_outputs = model.generate(generated, do_sample=True, top_k=50, max_length=50, top_p=0.95, temperature=0.7, frequency_penalty=0.1, num_return_sequences=20)
for i, sample_output in enumerate(sample_outputs):print("{}: {}".format(i, tokenizer.decode(sample_output, skip_special_tokens=True)))

参考: 

Guide to fine-tuning Text Generation models: GPT-2, GPT-Neo and T5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/20978.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

路径依赖:穷人很难逆袭突破的科学道理

路径依赖 为什么要了解路径依赖原理 马云说&#xff1a;“晚上想想千条路&#xff0c;早上醒走原路。“我们会看到一些社会现象&#xff0c;为什么穷人最终大部分还是穷人&#xff0c;即使告诉他方法&#xff0c;提供给他资金&#xff0c;最终还是穷人&#xff1f;为什么很多…

穷人跨越阶层有多难?

— 1 — 最难突破的就是父母 父母是每个人的起点&#xff0c;也是绝大部分人的天花板。 中国最近这代人大部分都比父母混的强&#xff0c;是因为父母被耽搁了&#xff0c;再往后几代&#xff0c;大家就能看出来我这句话的威力了。 美国英国德国那边的成熟型社会这一点非常明显&…

李宏毅2023春季机器学习笔记 - 01生成AI(ChatGPT)

一、引言 预设的知识储备要求&#xff1a;数学&#xff08;微积分、线性代数、机率&#xff09;&#xff1b;编程能力&#xff08;读写python&#xff09; 这门课专注在 深度学习领域deep learning&#xff0c; 事实上深度学习在今天的整个机器学习&#xff08;ML&#xff09…

穷人入门区块链指南

本文来自作者 Fengy 在 GitChat 上分享 「区块链与比特币快速入门」 编辑 | 甘道夫 写在前面 本人是个对编程以及区块链感兴趣的人。平时没事的时候喜欢阅读技术博客&#xff0c;技术书籍。 本次在 GitChat 上发起 Chat&#xff0c;主要是带领区块链小白、炒币者、区块链爱好者…

穷人翻身唯一出路是什么?穷人赚钱一点都不难?

世界上有很多种人&#xff0c;可以分为男人或者女人。更全面一点可以说是穷人和富人&#xff0c;有些人出生就含着金钥匙&#xff0c;而有的人可能连饭都吃不上&#xff0c;但是又不想就此放弃&#xff0c;所以会选择创业这条路&#xff0c;穷人翻身唯一出路到底是什么&#xf…

这个社会穷人的出路在哪里?

穷人也分上进的穷人和不上进的穷人&#xff0c;如果你自己不上进&#xff0c;那就根本没有出路。 如果你上进&#xff0c;就多少还有点办法。 如果你没有学历&#xff0c;说实话&#xff0c;挺难的&#xff0c;在现在这个社会&#xff0c;没有学历&#xff0c;只知道苦做&…

中国移动牵头定义【“1”个技术底座+“X”个厂商算法】隐私计算平台

开放隐私计算 《中国移动“1X”隐私计算平台纳管集成规范》于2月10日正式发布&#xff0c;该规范是中国移动牵头组织业内技术伙伴亚信科技、富数科技、蓝象智联、数牍科技、同盾科技等多个业内技术合作伙伴联合编写&#xff0c;主要基于1X架构的互联互通分级纳管模式展开说明。…

一万年太久,只争朝夕 | Foundation model的进展仍不够快

编者按&#xff1a;如今根基模型&#xff08;Foundation Models&#xff09;的应用和相关创新正在快速涌现&#xff0c;但仍有很大的提升空间&#xff0c;目前还无法充分发挥根基模型的潜能、将其高效快速地应用于企业级AI应用中。 根基模型的加速应用和落地&#xff0c;带动了…

【思维模型】概率思维的价值:找到你的人生算法!打开你的人生格局!实现认知跃迁!

把同样公平的机会放在放在很多人面前,不同的人生算法,会得到迥然不同的结果。 概率思维是什么? 【ChatGPT】概率思维是一种通过使用数学模型来思考和评估不确定性事件的方法。它通过计算不同可能性的概率来预测事件的结果,并评估风险和机会。 概率思维的价值在于它可以帮…

GPT-4越强,这些数据隐私问题就越需要被重视!

开放隐私计算 今天&#xff0c;ChatGPT4.0版本&#xff08;下称GPT-4&#xff09;正式发布&#xff0c;引爆了我们的话题圈子。GPT-4霸榜各个频道、社区的热度头条&#xff0c;不管是学术界还是工业界&#xff0c;是茶余饭后的谈资还是头脑风暴的创新&#xff0c;到处都能听到“…

学习英语给你带来了哪些机会?

昨天文章发出后&#xff0c;J姐姐给予了一些更正&#xff0c;我希望将来也能够像她那样走出去看一看。 Y呢&#xff0c;并不是我说的那样混日子&#xff0c;了解更多之后&#xff0c;才发现他是个王者&#xff0c;顿时肃然起敬。 “一起学英语”群里大佬云集&#xff0c;希望他…

如何填报高考志愿2020流程图解和最全指南

详细原文&#xff0c;点击 https://zhuanlan.zhihu.com/p/161167881 阅读。 每年高考完后&#xff0c;并不是最轻松的时刻&#xff0c;因为这个时候学生要做的就是&#xff0c;估分以及报考大学&#xff0c;填报志愿。 而怎么填写高考志愿&#xff0c;难倒了一大众家长学生&a…

给高考生填报专业和志愿的建议

给高考生填报专业&#xff0c;志愿建议 开头提示&#xff1a;我又来参加活动啦~ 活动&#xff1a;【高考季征文】高考那些事儿&#xff0c;作为过来人我有话要说 时间过的真快&#xff0c;想想19级高考已经过去三年了&#xff0c;不知不觉就上20多岁了&#xff0c;今天我们就聊…

【高考志愿填报-让你领先在起跑线上】学长给学弟学妹七点建议,字字珠玑!

文章大纲 一:前言二: 选择什么学校和选择什么专业(一): 选择学校需要前需要考虑的事情(二): 辅助你做决策的工具(三): 选择什么专业 三: 计算机专业如何(一) 什么是计算机类专业:(二): 计算机科学与技术专业一:定义:二:各类专业排名:三:《2020年中国大学生就业报告》Top10行业四…

老菜鸟学PYthon - 高考志愿填报数据的实时采集

一直想学习Python&#xff0c;又一直懒&#xff0c;直到今年高考志愿填报开始&#xff0c;在跟进学习的过程中发现了很多高分却报漏未被录取或没有报上的情况。&#xff08;自家小子今年下半年开始高三生涯&#xff09; 学习目的&#xff1a;2022年7月开始的高考志愿填报时&am…

教你用Python浪漫表白

虽然2.14情人节已过&#xff0c;但接下来还有白色情人节&#xff0c;黑色情人节&#xff0c;玫瑰情人节…… 如果你有意中人, 赶紧抓住机会表白! Python浪漫表白! Python具有超强大的绘图功能&#xff0c;可以在你准备表白时祝你一臂之力. Python导包 import numpy as np impor…

本周大新闻|苹果首款MR没有主打卖点;Meta认为AI是AR OS的基础

​本周XR大新闻&#xff0c;AR方面&#xff0c;苹果首款MR或没有主打卖点&#xff0c;反而尽可能支持更多App和服务&#xff1b;扎克伯格表示基于AI的AR眼镜操作系统是下一代计算平台的基础&#xff1b;微软芯片工程VP Jean Boufarhat加入Meta芯片团队&#xff1b;Humane展示了…

《塞尔达传说》发售 | 历史上的今天

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 2 月 21 日&#xff0c;在 1804 年的今天&#xff0c;英国人理查德特里维西克经过多年的探索、研究&#xff0c;终于制造了一台单一汽缸和一辆蒸汽机车&#xf…

Language Models Meet World Models: Embodied Experiences Enhance Language Models翻译

摘要 尽管大型语言模型&#xff08;LM&#xff09;在众多任务中表现出了出色的能力&#xff0c;但它们经常在物理环境中无法进行的简单推理和计划&#xff0c;例如理解目标的持续性或计划家庭活动。这种局限源于以下事实&#xff1a;LM仅在书面文本中训练&#xff0c;而缺乏基…

OpenAI CEO 称公司没有上市计划;特斯拉自动驾驶将开放给其他车企;百度智能云推出代码助手 Comate|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…