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