🚀 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 的預訓練。
感謝以下為項目做出貢獻的人員: