🚀 Granite-3B-Code-Base-2K
Granite-3B-Code-Base-2K 是一個僅解碼器的代碼模型,專為代碼生成任務(如代碼生成、代碼解釋、代碼修復等)而設計。它採用兩階段訓練策略從頭開始訓練,能全面理解多種編程語言和語法,還具備良好的推理和遵循指令的能力。
🚀 快速開始
預期用途
大語言模型在軟件工程生產力方面的重要企業用例包括代碼生成、代碼解釋、代碼修復、生成單元測試、生成文檔、解決技術債務問題、漏洞檢測、代碼翻譯等。所有 Granite 代碼基礎模型,包括這個 30 億參數的模型,都能夠處理這些任務,因為它們是在來自 116 種編程語言的大量代碼數據上進行訓練的。
生成代碼示例
以下是一個如何使用 Granite-3B-Code-Base-2K 模型的簡單示例:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda"
model_path = "ibm-granite/granite-3b-code-base-2k"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)
model.eval()
input_text = "def generate():"
input_tokens = tokenizer(input_text, return_tensors="pt")
for i in input_tokens:
input_tokens[i] = input_tokens[i].to(device)
output = model.generate(**input_tokens)
output = tokenizer.batch_decode(output)
for i in output:
print(i)
✨ 主要特性
- 全面的語言理解:在來自 116 種編程語言的 4 萬億個標記上進行訓練,確保對編程語言和語法有全面的理解。
- 兩階段訓練策略:第一階段在大量代碼數據上訓練,第二階段在精心設計的高質量代碼和自然語言數據混合的 5000 億個標記上訓練,提高模型的推理和遵循指令的能力。
📦 安裝指南
文檔未提供安裝步驟,故跳過此章節。
💻 使用示例
基礎用法
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
device = "cuda"
model_path = "ibm-granite/granite-3b-code-base-2k"
tokenizer = AutoTokenizer.from_pretrained(model_path)
model = AutoModelForCausalLM.from_pretrained(model_path, device_map=device)
model.eval()
input_text = "def generate():"
input_tokens = tokenizer(input_text, return_tensors="pt")
for i in input_tokens:
input_tokens[i] = input_tokens[i].to(device)
output = model.generate(**input_tokens)
output = tokenizer.batch_decode(output)
for i in output:
print(i)
高級用法
文檔未提供高級用法示例,故跳過此部分。
📚 詳細文檔
模型概述
Granite-3B-Code-Base-2K 是一個僅解碼器的代碼模型,專為代碼生成任務(如代碼生成、代碼解釋、代碼修復等)而設計。它採用兩階段訓練策略從頭開始訓練。在第一階段,模型在來自 116 種編程語言的 4 萬億個標記上進行訓練,確保對編程語言和語法有全面的理解。在第二階段,模型在精心設計的高質量代碼和自然語言數據混合的 5000 億個標記上進行訓練,以提高模型的推理和遵循指令的能力。
開發者信息
訓練數據
- 數據收集和過濾:預訓練代碼數據來自公開可用的數據集(如 GitHub Code Clean、Starcoder data),以及來自 GitHub 的其他公共代碼倉庫和問題。我們對原始數據進行過濾,保留 116 種編程語言的代碼。在進行語言過濾後,我們還會過濾掉低質量的代碼。
- 精確和模糊去重:我們採用積極的去重策略,包括精確和模糊去重,以刪除具有(近乎)相同代碼內容的文檔。
- HAP、PII、惡意軟件過濾:我們應用 HAP 內容過濾器,以降低模型生成仇恨、辱罵或褻瀆性語言的可能性。我們還通過用相應的標記(如 ⟨NAME⟩、⟨EMAIL⟩、⟨KEY⟩、⟨PASSWORD⟩)替換個人身份信息(PII)內容(如姓名、電子郵件地址、密鑰、密碼)來確保對其進行編輯。此外,我們使用 ClamAV 掃描所有數據集,以識別和刪除源代碼中的惡意軟件實例。
- 自然語言數據集:除了收集用於模型訓練的代碼數據外,我們還策劃了幾個公開可用的高質量自然語言數據集,以提高模型在語言理解和數學推理方面的能力。與代碼數據不同,我們不會對這些數據集進行去重。
基礎設施
我們使用 IBM 的兩個超級計算集群 Vela 和 Blue Vela 來訓練 Granite 代碼模型,這兩個集群分別配備了 NVIDIA A100 和 H100 GPU。這些集群為在數千個 GPU 上訓練我們的模型提供了可擴展且高效的基礎設施。
倫理考慮和侷限性
使用大語言模型涉及人們必須意識到的風險和倫理考慮。在代碼生成方面,強烈建議不要完全依賴特定的代碼模型來做出關鍵決策或獲取有影響力的信息,因為生成的代碼不能保證按預期工作。Granite-3B-Code-Base-2K 模型在這方面也不例外。儘管該模型適用於多個與代碼相關的任務,但它沒有進行任何安全對齊,因此可能會產生有問題的輸出。此外,由於較小的模型尺寸和記憶容量,尚不確定它們在生成場景中是否可能因直接從訓練數據集中複製源代碼而更容易出現幻覺。這方面目前是一個活躍的研究領域,我們預計在這個領域會有更嚴格的探索、理解和緩解措施。在倫理方面,所有大語言模型都存在被惡意利用的潛在風險。我們敦促社區以合乎道德的意圖和負責任的方式使用 Granite-3B-Code-Base-2K 模型。
🔧 技術細節
模型指標
任務類型 |
數據集 |
pass@1 值 |
文本生成 |
MBPP |
36.0 |
文本生成 |
MBPP+ |
45.1 |
文本生成 |
HumanEvalSynthesis(Python) |
36.6 |
文本生成 |
HumanEvalSynthesis(JavaScript) |
37.2 |
文本生成 |
HumanEvalSynthesis(Java) |
40.9 |
文本生成 |
HumanEvalSynthesis(Go) |
26.2 |
文本生成 |
HumanEvalSynthesis(C++) |
35.4 |
文本生成 |
HumanEvalSynthesis(Rust) |
22.0 |
文本生成 |
HumanEvalExplain(Python) |
25.0 |
文本生成 |
HumanEvalExplain(JavaScript) |
18.9 |
文本生成 |
HumanEvalExplain(Java) |
29.9 |
文本生成 |
HumanEvalExplain(Go) |
17.1 |
文本生成 |
HumanEvalExplain(C++) |
26.8 |
文本生成 |
HumanEvalExplain(Rust) |
14.0 |
文本生成 |
HumanEvalFix(Python) |
18.3 |
文本生成 |
HumanEvalFix(JavaScript) |
23.2 |
文本生成 |
HumanEvalFix(Java) |
29.9 |
文本生成 |
HumanEvalFix(Go) |
24.4 |
文本生成 |
HumanEvalFix(C++) |
16.5 |
文本生成 |
HumanEvalFix(Rust) |
3.7 |
模型信息表格
屬性 |
詳情 |
模型類型 |
僅解碼器的代碼模型 |
訓練數據 |
來自 116 種編程語言的 4 萬億個標記(第一階段);精心設計的高質量代碼和自然語言數據混合的 5000 億個標記(第二階段) |
訓練數據集 |
codeparrot/github-code-clean、bigcode/starcoderdata、open-web-math/open-web-math、math-ai/StackMathQA 等 |
評估指標 |
code_eval |
庫名稱 |
transformers |
標籤 |
code、granite |
📄 許可證
本模型使用 Apache 2.0 許可證。