CodeGemma:基于Gemma的开源代码模型,简单测试了一下,效果不错(image matting开源代码)
刚刚Google放出了CodeGemma的技术报告:“CodeGemma: Open Code Models Based on
Gemma ”
报告地址:https://storage.googleapis.com/deepmind-media/gemma/codegemma_report.pdf
添加图片注释,不超过 140 字(可选)
CodeGemma,一个基于Google DeepMind的Gemma模型构建的开源代码模型家族,已经在代码生成和理解领域引起了巨大关注。这个模型不仅提高了代码生成能力,还保留了强大的自然语言理解能力,为各种应用场景提供了强大的支持。在这篇论文中,我们将深入探讨CodeGemma的技术细节和评估结果,以及它对AI领域的影响。
1 简介
CodeGemma模型是基于Gemma预训练模型构建的,通过在大量代码数据上进行进一步预训练,取得了在代码补全和生成任务上的领先地位。同时,它还保留了Gemma模型强大的自然语言理解能力。CodeGemma包括一个7B参数的预训练模型和一个7B参数的指令调优模型,以及一个2B参数的专门用于代码补全和生成任务的模型。
添加图片注释,不超过 140 字(可选)
2 预训练
CodeGemma模型在超过5000亿个代码和自然语言token上进行进一步预训练。2B模型采用100%代码数据进行训练,而7B模型采用80%代码和20%自然语言数据混合。预训练中,CodeGemma使用了基于Fill-in-the-Middle的任务,并对原始方法进行了改进。此外,CodeGemma还对代码数据进行了一些额外的预处理,如将相关的源代码文件打包在一起进行训练。
添加图片注释,不超过 140 字(可选)
3 指令调优
指令调优阶段,CodeGemma模型使用了开源数学数据集和合成代码数据集进行监督微调。这些数学数据集包括MATH、GSM8k、MathQA等,旨在提高模型的数学推理能力。同时,CodeGemma还使用了合成代码指令数据生成器生成数据集,并经过过滤和评估后用于微调和强化学习。
添加图片注释,不超过 140 字(可选)
4 评估
CodeGemma在代码补全和生成任务上进行了全面评估,结果显示2B模型在速度和质量上都有出色表现。7B模型则在python编程基准测试中显著超越了Gemma基模型。在多语言编程基准测试中,CodeGemma也展现了强大的编程能力。在自然语言理解和数学推理方面,CodeGemma保留了Gemma模型的大部分能力。
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
5 Inference Recommendations
CodeGemma专为实际部署而设计。2B模型在低延迟应用场景中表现出色,非常适合集成开发环境等场景。而7B模型则适合在托管环境中使用,以获得更高的模型质量。论文还讨论了CodeGemma的局限性,并给出了使用建议。
结论:
CodeGemma是一个强大的开源代码模型家族,不仅提高了代码生成能力,还保留了强大的自然语言理解能力。这一突破为各种应用场景带来了强大的支持,推动了AI领域的进一步发展。
在Ollama上简单测试
发现ollama已经支持codegemma了:https://ollama.com/library/codegemma ,默认是4bit量化,也支持其他版本。我就选了在16G显卡上能跑的最大的模型“codegemma:7b-instruct-q6_K”
添加图片注释,不超过 140 字(可选)
添加图片注释,不超过 140 字(可选)
运行
ollama run codegemma:7b-instruct-q6_K
简单测试了一下效果:
import requestsimport jsondef send_message_to_ollama(message, port=11434): url = f"http://localhost:{port}/api/chat" payload = { "model": "codegemma:7b-instruct-q6_K", "messages": [{"role": "user", "content": message}] } response = requests.post(url, json=payload) if response.status_code == 200: response_content = "" for line in response.iter_lines(): if line: response_content = json.loads(line)["message"]["content"] return response_content else: return f"Error: {response.status_code} - {response.text}"if __name__ == "__main__": user_input = "用python画一个抛物线" response = send_message_to_ollama(user_input) print("Ollama's response:") print(response)
返回结果:
Ollama's response:```pythonimport numpy as npimport matplotlib.pyplot as plt# 定义抛物线函数def parabola(x, a, b, c): return a * x**2 b * x c# 定义抛物线的参数a = 2b = 1c = -3# 生成x坐标x = np.linspace(-2, 2, 100)# 计算y坐标y = parabola(x, a, b, c)# 画图plt.plot(x, y)plt.title('抛物线')plt.xlabel('x')plt.ylabel('y')plt.show()```**参数:*** `a`:抛物线的开口方向。正值表示向上开口,负值表示向下开口。* `b`:抛物线的横移量。正值表示向右移,负值表示向左移。* `c`:抛物线的纵移量。正值表示向上移,负值表示向下移。**注意:*** 该代码默认情况下绘制的是开口向上的抛物线。如果您需要绘制开口向下或横向的抛物线,请更改 `a` 参数。* 您可以通过调整 `b` 和 `c` 参数来调整抛物线的形状和位置。**输出:**该代码将绘制以下抛物线:```y = 2x^2 x - 3```
运行代码
添加图片注释,不超过 140 字(可选)