CodeGemma:基于Gemma的開源代碼模型,簡單測試了一下,效果不錯(image matting開源代碼)
剛剛Google放出了CodeGemma的技術(shù)報告:“CodeGemma: Open Code Models Based on
Gemma ”
報告地址:https://storage.googleapis.com/deepmind-media/gemma/codegemma_report.pdf
添加圖片注釋,不超過 140 字(可選)
CodeGemma,一個基于Google DeepMind的Gemma模型構(gòu)建的開源代碼模型家族,已經(jīng)在代碼生成和理解領(lǐng)域引起了巨大關(guān)注。這個模型不僅提高了代碼生成能力,還保留了強大的自然語言理解能力,為各種應用場景提供了強大的支持。在這篇論文中,我們將深入探討CodeGemma的技術(shù)細節(jié)和評估結(jié)果,以及它對AI領(lǐng)域的影響。
1 簡介
CodeGemma模型是基于Gemma預訓練模型構(gòu)建的,通過在大量代碼數(shù)據(jù)上進行進一步預訓練,取得了在代碼補全和生成任務上的領(lǐng)先地位。同時,它還保留了Gemma模型強大的自然語言理解能力。CodeGemma包括一個7B參數(shù)的預訓練模型和一個7B參數(shù)的指令調(diào)優(yōu)模型,以及一個2B參數(shù)的專門用于代碼補全和生成任務的模型。
添加圖片注釋,不超過 140 字(可選)
2 預訓練
CodeGemma模型在超過5000億個代碼和自然語言token上進行進一步預訓練。2B模型采用100%代碼數(shù)據(jù)進行訓練,而7B模型采用80%代碼和20%自然語言數(shù)據(jù)混合。預訓練中,CodeGemma使用了基于Fill-in-the-Middle的任務,并對原始方法進行了改進。此外,CodeGemma還對代碼數(shù)據(jù)進行了一些額外的預處理,如將相關(guān)的源代碼文件打包在一起進行訓練。
添加圖片注釋,不超過 140 字(可選)
3 指令調(diào)優(yōu)
指令調(diào)優(yōu)階段,CodeGemma模型使用了開源數(shù)學數(shù)據(jù)集和合成代碼數(shù)據(jù)集進行監(jiān)督微調(diào)。這些數(shù)學數(shù)據(jù)集包括MATH、GSM8k、MathQA等,旨在提高模型的數(shù)學推理能力。同時,CodeGemma還使用了合成代碼指令數(shù)據(jù)生成器生成數(shù)據(jù)集,并經(jīng)過過濾和評估后用于微調(diào)和強化學習。
添加圖片注釋,不超過 140 字(可選)
4 評估
CodeGemma在代碼補全和生成任務上進行了全面評估,結(jié)果顯示2B模型在速度和質(zhì)量上都有出色表現(xiàn)。7B模型則在python編程基準測試中顯著超越了Gemma基模型。在多語言編程基準測試中,CodeGemma也展現(xiàn)了強大的編程能力。在自然語言理解和數(shù)學推理方面,CodeGemma保留了Gemma模型的大部分能力。
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
添加圖片注釋,不超過 140 字(可選)
5 Inference Recommendations
CodeGemma專為實際部署而設(shè)計。2B模型在低延遲應用場景中表現(xiàn)出色,非常適合集成開發(fā)環(huán)境等場景。而7B模型則適合在托管環(huán)境中使用,以獲得更高的模型質(zhì)量。論文還討論了CodeGemma的局限性,并給出了使用建議。
結(jié)論:
CodeGemma是一個強大的開源代碼模型家族,不僅提高了代碼生成能力,還保留了強大的自然語言理解能力。這一突破為各種應用場景帶來了強大的支持,推動了AI領(lǐng)域的進一步發(fā)展。
在Ollama上簡單測試
發(fā)現(xiàn)ollama已經(jīng)支持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)
返回結(jié)果:
Ollama's response:```pythonimport numpy as npimport matplotlib.pyplot as plt# 定義拋物線函數(shù)def parabola(x, a, b, c): return a * x**2 b * x c# 定義拋物線的參數(shù)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()```**參數(shù):*** `a`:拋物線的開口方向。正值表示向上開口,負值表示向下開口。* `b`:拋物線的橫移量。正值表示向右移,負值表示向左移。* `c`:拋物線的縱移量。正值表示向上移,負值表示向下移。**注意:*** 該代碼默認情況下繪制的是開口向上的拋物線。如果您需要繪制開口向下或橫向的拋物線,請更改 `a` 參數(shù)。* 您可以通過調(diào)整 `b` 和 `c` 參數(shù)來調(diào)整拋物線的形狀和位置。**輸出:**該代碼將繪制以下拋物線:```y = 2x^2 x - 3```
運行代碼
添加圖片注釋,不超過 140 字(可選)