🚀 Genji-python 6B
Genji-python 6B 是一个经过微调的变压器模型,专门用于辅助编写 Python 代码。它基于 EleutherAI 的 GPT - J 6B 模型,在近 4GB 的 Python 代码上进行训练。通过 Colab 笔记本,你可以轻松使用该模型。
🚀 快速开始
若要使用该模型,你可以查看我们的 Colab 笔记本:
Notebook
✨ 主要特性
- 基于 EleutherAI 的 GPT - J 6B 模型微调,专注于 Python 代码。
- 拆分模型的检查点,加载时使用更少系统内存,加载速度更快。
📦 安装指南
此模型目前仅可通过我们的分叉仓库使用,因为 GPT - J 尚未合并到主 transformers 仓库。待合并后,我们会让该模型更易于加载。
步骤 1:安装分叉仓库
使用 pip 安装:
pip install git+https://github.com/finetuneanon/transformers@gpt-neo-localattention3-rp-b
步骤 2:安装 git - lfs
在 Ubuntu 上:
apt install git-lfs
安装完成后,初始化 git - lfs:
git lfs install
步骤 3:克隆仓库
git clone https://huggingface.co/NovelAI/genji-python-6B-split
💻 使用示例
基础用法
我们建议以 FP16 格式使用该模型,这样它可以适配 16GB VRAM 的显卡。
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("Generation:\n" + generated_text)
运行上述代码会生成以下结果:
Prompt:
def print_customer_name
Generation:
(self, customer):
"""Print the name of a customer."""
if not self.is_valid():
return
print("Customer: {}".format(customer))
高级用法
你也可以通过我们的 Colab 笔记本查看更多使用示例:
Notebook
📚 详细文档
模型描述
Genji 是在 EleutherAI 的 GPT - J 6B 模型上微调的变压器模型。此特定模型仅在大小接近 4GB 的 Python 代码上进行训练。拆分模型的检查点已拆分,这使得加载时使用更少的系统 RAM,并且加载速度更快。不过,该模型的设置需要更多工作,因为你需要安装 git - lfs 并拉取仓库。
属性 |
详情 |
模型类型 |
基于 EleutherAI 的 GPT - J 6B 微调的变压器模型 |
训练数据 |
来自 Pile 的 Python 代码 |
超参数 |
n_parameters | 6,053,381,344 | n_layers | 28* | d_model | 4,096 | d_ff | 16,384 | n_heads | 16 | d_head | 256 | n_ctx | 2,048 | n_vocab | 50,400(与 GPT - 2/3 使用相同的分词器) | 位置编码 | 旋转位置编码 (RoPE) | RoPE 维度 | 64 |
|
*
每层由一个前馈块和一个自注意力块组成
该模型由 28 层组成,模型维度为 4096,前馈维度为 16384。模型维度被拆分为 16 个头,每个头的维度为 256。旋转位置编码 (RoPE) 应用于每个头的 64 个维度。该模型使用 50257 的分词词汇表进行训练,使用与 GPT - 2/GPT - 3 相同的 BPE 集。
训练数据
GPT - J 6B 在 Pile 上进行预训练,这是 EleutherAI 为训练此模型创建的大规模精选数据集。预训练后,它在从 Pile 中提取的 Python 代码上进行微调。
训练过程
Genji - python - 6B 在约 6.55 亿个标记上训练了 20k 步,学习率为 2e - 06。
预期用途
该模型旨在辅助编写 Python 代码,并让你尝试一些有趣的应用。
🔧 技术细节
- 模型基于 GPT - J 6B 微调,在 Python 代码上进行有针对性的训练。
- 采用旋转位置编码 (RoPE) 技术,在 64 个维度上应用。
- 拆分模型检查点以优化加载性能。
📄 许可证
本项目采用 Apache - 2.0 许可证。
致谢
本项目得益于 TPU Research Cloud 和 EleutherAI 提供的计算资源,用于 GPT - J 6B 的预训练。
感谢以下为项目做出贡献的人员: