许可证:apache-2.0
数据集:
- bigcode/the-stack
- bigcode/the-stack-v2
- bigcode/starcoderdata
- bigcode/commitpack
库名称:transformers
标签:
- 代码
模型索引:
- 名称:Mellum-4b-base
结果:
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_python_v1.1
名称:RepoBench 1.1 (Python)
指标:
- 名称:EM
类型:精确匹配
值:0.2591
已验证:false
- 名称:EM ≤ 8k
类型:精确匹配
值:0.2797
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_python_v1.1
名称:RepoBench 1.1 (Python, 2k)
指标:
- 名称:EM
类型:精确匹配
值:0.2820
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_python_v1.1
名称:RepoBench 1.1 (Python, 4k)
指标:
- 名称:EM
类型:精确匹配
值:0.2795
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_python_v1.1
名称:RepoBench 1.1 (Python, 8k)
指标:
- 名称:EM
类型:精确匹配
值:0.2777
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_python_v1.1
名称:RepoBench 1.1 (Python, 12k)
指标:
- 名称:EM
类型:精确匹配
值:0.2453
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_python_v1.1
名称:RepoBench 1.1 (Python, 16k)
指标:
- 名称:EM
类型:精确匹配
值:0.2110
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_java_v1.1
名称:RepoBench 1.1 (Java)
指标:
- 名称:EM
类型:精确匹配
值:0.2858
已验证:false
- 名称:EM ≤ 8k
类型:精确匹配
值:0.3108
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_java_v1.1
名称:RepoBench 1.1 (Java, 2k)
指标:
- 名称:EM
类型:精确匹配
值:0.3202
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_java_v1.1
名称:RepoBench 1.1 (Java, 4k)
指标:
- 名称:EM
类型:精确匹配
值:0.3212
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_java_v1.1
名称:RepoBench 1.1 (Java, 8k)
指标:
- 名称:EM
类型:精确匹配
值:0.2910
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_java_v1.1
名称:RepoBench 1.1 (Java, 12k)
指标:
- 名称:EM
类型:精确匹配
值:0.2492
已验证:false
- 任务:
类型:文本生成
数据集:
类型:tianyang/repobench_java_v1.1
名称:RepoBench 1.1 (Java, 16k)
指标:
- 名称:EM
类型:精确匹配
值:0.2474
已验证:false
- 任务:
类型:文本生成
数据集:
类型:gonglinyuan/safim
名称:SAFIM
指标:
- 名称:pass@1
类型:pass@1
值:0.3811
已验证:false
- 任务:
类型:文本生成
数据集:
类型:gonglinyuan/safim
名称:SAFIM (算法类)
指标:
- 名称:pass@1
类型:pass@1
值:0.2530
已验证:false
- 任务:
类型:文本生成
数据集:
类型:gonglinyuan/safim
名称:SAFIM (控制类)
指标:
- 名称:pass@1
类型:pass@1
值:0.3839
已验证:false
- 任务:
类型:文本生成
数据集:
类型:gonglinyuan/safim
名称:SAFIM (API类)
指标:
- 名称:pass@1
类型:pass@1
值:0.5065
已验证:false
- 任务:
类型:文本生成
数据集:
类型:loubnabnl/humaneval_infilling
名称:HumanEval填充测试 (单行)
指标:
- 名称:pass@1
类型:pass@1
值:0.6621
已验证:false
- 任务:
类型:文本生成
数据集:
类型:loubnabnl/humaneval_infilling
名称:HumanEval填充测试 (多行)
指标:
- 名称:pass@1
类型:pass@1
值:0.3852
已验证:false
- 任务:
类型:文本生成
数据集:
类型:loubnabnl/humaneval_infilling
名称:HumanEval填充测试 (随机片段)
指标:
- 名称:pass@1
类型:pass@1
值:0.2969
已验证:false
模型描述
Mellum-4b-base是JetBrains推出的首个开源大语言模型(LLM),专为代码相关任务优化。
该模型基于超过4万亿token进行训练,支持8192token的上下文窗口,涵盖多种编程语言,特别适合代码补全场景。采用LLaMA风格的40亿参数架构,既适合云端推理(如通过vLLM),也适合本地部署(如使用llama.cpp或Ollama)。
训练采用自动混合精度(AMP)和bf16精度,Hugging Face上发布的版本保留bf16格式供公开使用。
该模型可集成到专业开发工具(如IDE智能代码建议)、AI编程助手以及代码理解与生成研究中,也适合教育应用和微调实验。本次发布包含基础模型和Python SFT模型,其他语言模型将陆续推出。需注意基础模型未针对下游任务进行开箱即用的微调,但完全支持监督微调(SFT)和强化学习(RL)以适应特定场景。
训练数据
- 总训练token量:约4.2万亿
- 语料来源:The Stack、StarCoder训练数据集、The Stack v2、CommitPack、英文维基百科
训练细节
- 上下文窗口:8,192 token
- 优化目标:标准语言建模
- 硬件:256块H200 NVIDIA GPU集群(Infiniband互联)
- 训练时长:约20天
基准测试
除基础模型分数外,我们还提供了Python微调模型的分数以供参考。
RepoBench 1.1
- 类型:单行补全
- 语言:Python和Java
- 指标:精确匹配率(EM)
由于Mellum最大支持8k上下文,我们同时报告全量平均值(2k/4k/8k/12k/16k)和支持范围内的平均值(≤8k)。
Python子集
模型 |
2k |
4k |
8k |
12k |
16k |
平均 |
≤8k平均 |
Mellum-4b-sft-python |
29.24% |
30.60% |
29.77% |
26.80% |
25.43% |
28.37% |
29.87% |
Mellum-4b-base |
28.20% |
27.95% |
27.77% |
24.53% |
21.10% |
25.91% |
27.97% |
Java子集
模型 |
2k |
4k |
8k |
12k |
16k |
平均 |
≤8k平均 |
Mellum-4b-base |
32.02% |
32.12% |
29.10% |
24.92% |
24.74% |
28.58% |
31.08% |
语法感知中间填充(SAFIM)
- 类型:混合多行/单行
- 语言:多语言
- 指标:pass@1
模型 |
算法类 |
控制类 |
API类 |
综合 |
Mellum-4b-sft-python |
33.16% |
36.11% |
57.10% |
42.12% |
Mellum-4b-base |
25.30% |
38.39% |
50.65% |
38.11% |
HumanEval填充测试
- 类型:单行/多行
- 语言:Python
- 指标:pass@1
模型 |
单行 |
多行 |
随机片段 |
Mellum-4b-sft-python |
80.45% |
48.19% |
37.68% |
Mellum-4b-base |
66.21% |
38.52% |
29.70% |
我们将持续改进模型并很快分享下一个迭代版本。
局限性
- 偏见:可能反映公开代码库中的偏见,例如生成的代码风格会接近开源仓库
- 安全性:代码建议不应默认视为安全或无漏洞
使用示例
通用生成
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-base')
model = AutoModelForCausalLM.from_pretrained('JetBrains/Mellum-4b-base')
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("### 上下文")
print(tokenizer.decode(out[0][:input_len]))
print("### 预测结果")
print(tokenizer.decode(out[0][input_len:]))