🚀 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 联系我们。