语言:
- 英文
标签:
- PyTorch
- 因果语言模型
许可证: Apache-2.0
数据集:
- The Pile
Genji-python 6B
如需查看示例用法或轻松使用该模型,可参考我们的Colab笔记本:
笔记本链接
模型描述
Genji是基于EleutherAI的GPT-J 6B模型微调而成的Transformer模型。此特定版本专精于Python代码训练,数据规模接近4GB。分片版模型通过拆分检查点,显著降低了加载时的系统内存占用并加速了加载过程。使用此模型需额外配置,包括安装git-lfs并拉取代码库。
超参数 |
值 |
参数量 |
6,053,381,344 |
层数 |
28* |
模型维度 |
4,096 |
前馈维度 |
16,384 |
注意力头数 |
16 |
头维度 |
256 |
上下文长度 |
2,048 |
词表大小 |
50,400(与GPT-2/3相同分词器) |
位置编码 |
旋转位置编码(RoPE) |
RoPE维度 |
64 |
*
每层包含一个前馈块和一个自注意力块
该模型包含28层,模型维度4096,前馈维度16384。模型维度被划分为16个注意力头,每头维度256。旋转位置编码(RoPE)应用于每个头的64个维度。模型使用与GPT-2/GPT-3相同的50257个BPE词表进行训练。
训练数据
GPT-J 6B基于EleutherAI构建的大规模精选数据集The Pile进行预训练。预训练完成后,使用从该数据集中提取的Python代码进行微调。
训练过程
Genji-python-6B在约6.55亿token上训练了2万步,学习率为2e-06。
使用目的
本模型旨在辅助Python代码编写,并支持探索创新性用法。
使用方法
当前模型需配合我们分叉的代码库使用(因GPT-J尚未合并至主流transformers库)。待合并后,将提供更便捷的加载方式。目前需使用以下分叉库:
分叉库
通过pip安装:
pip install git+https://github.com/finetuneanon/transformers@gpt-neo-localattention3-rp-b
需安装git-lfs,Ubuntu系统:
apt install git-lfs
安装后初始化:
git lfs install
克隆本仓库:
git clone https://huggingface.co/NovelAI/genji-python-6B-split
推荐以FP16格式加载模型,可在16GB显存显卡上运行。
使用示例:
from transformers import (
AutoTokenizer,
AutoModelForCausalLM,
GPTNeoForCausalLM,
)
model = AutoModelForCausalLM.from_pretrained("genji-python-6B-split/model").half().eval().cuda()
tokenizer = AutoTokenizer.from_pretrained("EleutherAI/gpt-neo-2.7B")
text = '''def print_customer_name'''
tokens = tokenizer(text, return_tensors="pt").input_ids
generated_tokens = model.generate(tokens.long().cuda(), use_cache=True, do_sample=True, top_k=50, temperature=0.3, top_p=0.9, repetition_penalty=1.125, min_length=1, max_length=len(tokens[0]) + 400, pad_token_id=tokenizer.eos_token_id)
last_tokens = generated_tokens[0][len(tokens[0]):]
generated_text = tokenizer.decode(last_tokens)
print("生成结果:\n" + generated_text)
运行后将输出:
输入:
def print_customer_name
生成结果:
(self, customer):
"""打印客户名称"""
if not self.is_valid():
return
print("Customer: {}".format(customer))
更多用法可参考Colab笔记本:
笔记本链接
评估结果
待补充
致谢
本项目得益于TPU研究云和EleutherAI提供的GPT-J 6B预训练算力支持。
特别贡献者: