🚀 Mellum-4b-sft-python
Mellum-4b-sft-python 是 JetBrains 首個開源大語言模型(LLM)的微調版本,專為代碼相關任務進行了優化。它能有效應用於代碼補全、智能代碼建議等場景,為開發者提供強大助力。
🚀 快速開始
Mellum-4b-sft-python 是 JetBrains 首個開源大語言模型(LLM)的微調版本,針對代碼相關任務進行了優化。該模型在超過 4 萬億個標記上進行預訓練,上下文窗口為 8192 個標記,涵蓋多種編程語言,之後針對 Python 代碼完成進行了微調。它採用 LLaMA 風格的架構,擁有 40 億個參數,無論是在雲端推理(例如通過 vLLM)還是本地部署(例如使用 llama.cpp 或 Ollama)都非常高效。
✨ 主要特性
- 多語言預訓練:在超過 4 萬億個標記上進行預訓練,涵蓋多種編程語言,上下文窗口達 8192 個標記。
- Python 代碼優化:專門針對 Python 代碼完成進行微調,適用於 Python 代碼相關任務。
- 高效架構:採用 LLaMA 風格架構,40 億個參數,支持雲端推理和本地部署。
- 多場景適用:可集成到專業開發工具、AI 編碼助手,也適用於教育應用和微調實驗。
📦 安裝指南
文檔未提供具體安裝步驟,故跳過此章節。
💻 使用示例
基礎用法
import json
from transformers import AutoTokenizer, AutoModelForCausalLM
example = """
import sys
import os
import time
sys.path.append(os.getcwd())
from cluster.prepare_data import get_headers_pairs_list, write_dist_matrix
from cluster.token_edit_distance import get_distance_matrix
if len(sys.argv) < 3:
print(
"Too few arguments. You should provide: \n1. dataset_filename" +
"\n2. output_data_filename"
)
sys.exit()
start = time.perf_counter()
dataset_filename_ = sys.argv[1]
output_data_filename_ = sys.argv[2]
headers_pairs = get_headers_pairs_list(dataset_filename_, verbose=True)
dist_matrix, max_dist = get_distance_matrix(
list(map(lambda x: x[1], headers_pairs)),
verbose=True
)
write_dist_matrix(dist_matrix, max_dist, output_data_filename_, verbose=True)
end = time.perf_counter()
"""
tokenizer = AutoTokenizer.from_pretrained('JetBrains/Mellum-4b-sft-python')
model = AutoModelForCausalLM.from_pretrained('JetBrains/Mellum-4b-sft-python')
encoded_input = tokenizer(example, return_tensors='pt', return_token_type_ids=False)
input_len = len(encoded_input["input_ids"][0])
out = model.generate(
**encoded_input,
max_new_tokens=100,
)
print("### Context")
print(tokenizer.decode(out[0][:input_len]))
print("### Prediction")
print(tokenizer.decode(out[0][input_len:]))
高級用法
example = """<filename>utils.py
def multiply(x, y):
return x * y
<filename>config.py
DEBUG = True
MAX_VALUE = 100
<filename>example.py
<fim_suffix>
# Test the function
result = calculate_sum(5, 10)
print(result)<fim_prefix>def calculate_sum(a, b):
<fim_middle>"""
encoded_input = tokenizer(example, return_tensors='pt', return_token_type_ids=False)
out = model.generate(
**encoded_input,
max_new_tokens=100,
)
📚 詳細文檔
模型信息
屬性 |
詳情 |
模型類型 |
Mellum-4b-sft-python 是 JetBrains 首個開源大語言模型的微調版本,專為代碼相關任務優化。 |
訓練數據 |
bigcode/the-stack、bigcode/the-stack-v2、bigcode/starcoderdata、bigcode/commitpack |
基礎模型 |
JetBrains/Mellum-4b-base |
評估結果
任務類型 |
數據集 |
指標 |
值 |
文本生成 |
RepoBench 1.1 (Python) |
EM |
0.2837 |
文本生成 |
RepoBench 1.1 (Python) |
EM ≤ 8k |
0.2987 |
文本生成 |
RepoBench 1.1 (Python, 2k) |
EM |
0.2924 |
文本生成 |
RepoBench 1.1 (Python, 4k) |
EM |
0.3060 |
文本生成 |
RepoBench 1.1 (Python, 8k) |
EM |
0.2977 |
文本生成 |
RepoBench 1.1 (Python, 12k) |
EM |
0.2680 |
文本生成 |
RepoBench 1.1 (Python, 16k) |
EM |
0.2543 |
文本生成 |
SAFIM |
pass@1 |
0.4212 |
文本生成 |
SAFIM (Algorithmic) |
pass@1 |
0.3316 |
文本生成 |
SAFIM (Control) |
pass@1 |
0.3611 |
文本生成 |
SAFIM (API) |
pass@1 |
0.5710 |
文本生成 |
HumanEval Infilling (Single-Line) |
pass@1 |
0.8045 |
文本生成 |
HumanEval Infilling (Multi-Line) |
pass@1 |
0.4819 |
文本生成 |
HumanEval Infilling (Random Span) |
pass@1 |
0.3768 |
侷限性
- 偏差:可能反映公共代碼庫中存在的偏差,例如可能生成與開源倉庫風格相似的代碼。
- 安全:代碼建議不能被假定為安全或無漏洞。
適用場景
該模型旨在集成到專業開發工具(例如 IDE 中的智能代碼建議)、AI 編碼助手以及代碼理解和生成的研究中,也適用於教育應用和微調實驗。
🔧 技術細節
Mellum 使用自動混合精度(AMP)和 bf16 精度進行訓練。上傳到 Hugging Face 的版本保留了 bf16 格式供公眾使用。
📄 許可證
本項目採用 Apache-2.0 許可證。
📖 引用
如果您使用此模型,請引用:
@misc{Mellum-4b-base,
title = {Mellum-4b-base},
author = {Pavlichenko, Nikita and Nazarov, Iurii and Dolgov, Ivan and Garanina, Ekaterina and Lasocki, Karol and Reshetnikova, Julia and Boitsov, Sergei and Bondyrev, Ivan and Karaeva, Dariia and Sheptyakov, Maksim and Ustalov, Dmitry and Mukhin, Artem and Proshev, Semyon and Abramov, Nikita and Kolomyttseva, Olga and Lysaniuk, Kseniia and Zavidnyi, Ilia and Semenkin, Anton and Tankov, Vladislav and Sazanovich, Uladzislau},
year = {2025},
}
📞 聯繫我們
如有問題、合作需求或其他請求,請通過 mellum@jetbrains.com 聯繫我們。