??
系列文章:
編程AI深度實戰:私有模型deep seek r1,必會ollama-CSDN博客
編程AI深度實戰:自己的AI,必會LangChain-CSDN博客
編程AI深度實戰:給vim裝上AI-CSDN博客
編程AI深度實戰:火的編程AI,都在用語法樹(AST)-CSDN博客
編程AI深度實戰:讓verilog不再是 AI 的小眾語言-CSDN博客
?
隨著開源 LLM 空間的發展,越來越多的模型變得專業化,“代碼”LLM 變得非常流行。這些 LLM 旨在比其 “常識” 對應物更小,但旨在超越更大的通用模型的編碼性能。
這些模型以極低的成本提供大型模型的功能,進一步使本地 LLM 空間民主化。特別是,在較小的編碼 LLM 領域中,有三個模型在競爭中脫穎而出:Codestral 22B、DeepSeek Coder V2 Lite 14B 和 Qwen 2.5 Coder 7B。
Codestral 22B 于 5 月 29 日發布,這是 Mistral 發布的第一款特定代碼模型。據說它精通 80 多種編程語言,具有 Fill-in-the-Middle 能力,可以與開發人員一起充當助手。
Qwen 2.5 Coder 7B 已于 2024 年 9 月 19 日由阿里云發布。它是 Qwen 系列的一部分,模型參數范圍從 1.5B 到 32B 不等,針對更接近閉源模型的性能。
DeepSeek V2 Coder 由 DeepSeek AI 于 2024 年 6 月發布。該模型是 DeepSeek V1 的改進版本,使用 1.17 萬億個代碼相關標記進行訓練,它專注于增強的代碼生成和數學功能,還支持 Fill-in-the-Middle。除了具有 2360 億個參數的 “基礎” 模型外,他們還發布了具有 160 億個參數的較小 “精簡” 版本。
?
比較數字
這三種型號在各自的參數類別中都擁有最先進的性能,而且數字相當可觀。我們來看看模型在最流行的編程基準測試 HumanEval 上的性能。
Codestral 得分為 81.1%,DeepSeek Coder v2 Lite 得分為 81.1%,而 Qwen 2.5 Coder 7B 在基準測試中得分為 88.4%,超過了比自身大得多的兩個模型。作為參考,OpenAI 的閉源 GPT-4 得分僅為 87.1%,而改進的 GPT-4o 得分僅比 Qwen 2.5 Coder 高出 2 個百分點,為 90.2%。
另一個值得注意的基準是 Spider,它包含 10,000 多個問題,與 5,000 多個復雜的跨域 SQL 查詢相匹配。此基準測試對于將 LLM 集成到數據庫中至關重要。這一次,Qwen 2.5 Coder 以更大的優勢領先,為 82.0%,而 Codestral 的得分僅為 76.6%。
下表比較了所有三種模型的基準,側面為 GPT-4o 作為參考:
?
?
?
添加圖片注釋,不超過 140 字(可選)
?
注意:Codestral 的基準測試數據取自 DeepSeek Coder 與 Codestral 的比較,高于 Mistral 的“官方”報告數據
我們從數字上看到,Qwen 2.5 Coder 7B 的性能絕對優于其他所有模型,在某些情況下,幾乎與 GPT-4o 的性能相當。
當然,數字永遠不能說明全部情況。我們需要在實際場景中測試這些模型,以了解它們如何 “執行” 或 “作”。
在下面的實驗中,我將在具有 24GB 統一內存的 M2 MacBook Air 上本地運行所有模型,使用 ollama,llama.cpp 在引擎蓋下運行。在模型優化方面,我將對所有模型使用 Q6_K 量化,它保留了原始模型的合理性能,同時允許所有模型都適合我的 24GB 機器。
為了了解模型大小和速度的差異,以下是它們在我的筆記本電腦上運行的 GGUF 文件大小以及它們的每秒令牌數 (t/s):
-
代碼 22B - 18GB~ (3.31t/s)
-
Deepseek Coder v2 Lite 16B - 14GB~ (8.35t/s)
-
Qwen 2.5 編碼器 7B - 6.3GB~ (10.31t/s)
?
經典游戲
以下是您文章的編輯版本,其中包含對語法、拼寫和尷尬措辭的更正:
讓我們從 HTML、CSS 和 JavaScript 中的經典貪吃蛇游戲開始。我想在一次性編碼任務中看到 LLM 的能力。對于沒有任何編程經驗來指導 LLM 或調試其輸出的人來說,它能很好地創建有用的東西嗎?以下是我在所有 LLM 上使用的提示:
在一個文件中用 HTML、CSS 和 JavaScript 編寫一個基本的功能性貪吃蛇游戲。玩家將使用箭頭鍵控制蛇。
Qwen Coder 生成代碼完全沒有問題,完美地完成了任務。我什至多次嘗試了提示的變體,以確保這不是僥幸,但 Qwen 每次都交付了。
?
?
?
?
添加圖片注釋,不超過 140 字(可選)
?
Qwen 實現上的 Snake 游戲
另一方面,Codestral 確實成功地制作了一款有效的游戲,但它并非沒有自己的怪癖和錯誤。碰撞檢測并不完全完美,蛇的速度太慢了,蛇的生長幾乎不明顯。
?
?
?
添加圖片注釋,不超過 140 字(可選)
?
Codestral 實現上的 Snake 游戲
Deepseek 的性能令人失望。盡管進行了多次對話,但它無法產生一個簡單的貪吃蛇游戲的有效實現。Deepseek 使用 “addEventListener” 方法來監聽按鍵,但由于移動代碼中的錯誤,該按鍵從未在其任何實現中注冊。
我還嘗試使用其他更復雜的游戲(如 2048、Minesweeper 和 Tetris)來提示 LLM。幾乎所有的 LLM 都在這些更“復雜”的提示符中失敗,提供的代碼幾乎無法正常工作,除了 Qwen 7B Coder,它是所有代碼中最小的。
在我的測試中,Qwen 在 2048 和俄羅斯方塊等復雜游戲中遇到了困難,但生成的代碼通常是半功能性的,例如 2048 年移動的一半有效,或者俄羅斯方塊中掉落的塊有效,但其他什么都沒有。
然而,對于 Minesweeper,Qwen 能夠始終如一地產生近乎完美的實現。以下是我在美學上更好的實現之一和(加速的)游戲。
?
?
?
?
添加圖片注釋,不超過 140 字(可選)
?
Qwen 實現上的 Minesweeper 游戲玩法
以下是結果摘要:
?
?
?
添加圖片注釋,不超過 140 字(可選)
?
?
?
?
Qwen 2.5 版本
Qwen 2.5 Coder 7B 開局強勁。它的 five_crop 功能運行完美,但重建功能存在一些問題。盡管進行了多次修改,但 Qwen 似乎對裁剪面具的確切內容感到困惑。
reconstruct 函數的輸入(即 five_crop 函數生成的輸出)是包含裁剪圖像的張量。第一維中的每個 b 圖像都表示不同的裁剪,從第一個圖像的左上角開始,然后是第二個圖像的左上角部分,依此類推。雖然 Qwen 似乎掌握了圖像重建背后的邏輯,但盡管反復提示和修改,用于提取作物的索引仍然存在問題。
?
?
添加圖片注釋,不超過 140 字(可選)
?
Qwen 的實現
?
DeepSeek 精簡版
Deepseek 也解決了five_crop但它的實現要繁瑣得多,也不太清晰。我更喜歡 Qwen 2.5 實現。對于 reconstruct 函數,代碼運行沒有錯誤,但圖像遠非重建,很像一個解錯的拼圖游戲。額外的提示和微移沒有提供任何改進。
?
?
添加圖片注釋,不超過 140 字(可選)
?
Deepseek Lite 的實現
?
代碼
Codestral 的 five_crop 函數完美無缺,可讀性超過了 Qwen,它使用 torchvision 的 crop 函數裁剪出每個區域,而不是 Qwen 使用的凌亂索引。與其他模型類似,它在重建功能方面存在一些困難,但在澄清了裁剪圖像的前導維度包含的內容后,Codestral 在第一次嘗試時給出了完美的實現。
?
?
?
添加圖片注釋,不超過 140 字(可選)
?
Codestral 的最終實現
?
“基本”知識
除了更長、更復雜的編碼任務外,我還向 LLM 提出了一些關于數學和 Python 知識的基本簡短問題。這些問題測試基本概念并評估 LLM 提供精確、準確答案的能力,而無需不必要的闡述,這是完成更復雜請求的基石。此外,它們可以揭示 LLM 知識庫或推理過程中意想不到的弱點。
-
31793 是素數嗎?
-
Qwen 實際上沒有直接回答,而是試圖 “模擬” Python 解釋器,寫下一些代碼,然后產生不正確的 “False” 輸出。
-
Deepseek 通過一長串測試逐個數字地檢查可整除性,回答錯誤,并說 31793 可以被 19 整除。
-
Codestral 嘗試編寫一些 Python 代碼來測試這個數字,但在響應的末尾給出了直接、正確的答案:“yes”。
-
編寫一個 Python 函數來反轉字符串,而無需使用內置的 reverse() 方法。
-
Qwen 編寫了一段功能代碼,但它沒有使用快捷方式 [::-1],而是反向循環遍歷列表。它確實建議將快捷方式實現作為 “替代方案”。
-
Deepseek 也生成了功能代碼,但甚至不建議使用快捷方式 [::-1]。相反,它巧妙地遍歷字符串并將每個字符附加到列表的前面,這是一種比 Qwen 更簡潔的實現,但并不完美。
-
Codestral 使用了 [::-1] 切片技巧并給出了簡潔、正確的響應。
-
計算半徑為 7.5 個單位的圓的面積。將您的答案四舍五入到小數點后兩位。
-
Qwen 準確地計算了面積,精確到第 100 位,即 176.71,并給出了不必要的冗長解釋。
-
Deepseek 給出了與 Qwen 幾乎相同的結果:解釋很長,但正確答案為 176.71。
-
Codestral 給出了簡潔、準確的答案:176.71。
-
對二進制數 1010 和 1100 進行 XOR 運算的結果是什么?
-
Qwen 回答錯誤,“0100”,并嘗試編寫無法運行的 Python 代碼來解決問題。
-
Deepseek 用不必要的冗長解釋正確地回答了。
-
Codestral 以適長的解釋正確回答。
結論
總體而言,看起來較大的模型稍微更“智能”。增加的參數大小使它們具有更“原始”的能力來回憶知識和理解上下文。最小的模型 Qwen 經常編寫和假裝運行 Python 代碼,而不是直接回答問題。Deepseek 和 Codestral 都更擅長僅在需要時編寫代碼。令人驚訝的是,只有 Codestral 給出了最簡潔和廣泛采用的反轉字符串的實現。
以下是本文中對三個模型完成的所有測試的摘要結果:
?
?
?
添加圖片注釋,不超過 140 字(可選)
?
?
您應該選擇哪一個?
在不考慮計算成本的情況下,我建議為 python 任務選擇 Codestral,為其他語言選擇 Qwen。
盡管 Codestral 在瀏覽器游戲的測試中并不出色,但它更大的參數數量只是讓對話感覺“更流暢”,因為它比較小的模型更能理解語言。與 Codestral 交談感覺更像是與 ChatGPT 的對話,而 Qwen 和 Deepseek 都感覺他們只知道如何用“代碼”說話。
如果內存限制和速度是一個限制因素,那么 Qwen 是不費吹灰之力的。在某些情況下,它比 Codestral 更智能,并且與 Codestral 相比需要的內存不到一半,q6 量化僅為 6.3 GB。它可以以不錯的速度在大多數 GPU 和所有 Apple Silicon Mac 上輕松運行。
當然,這可能不會持續太久,因為 Qwen 背后的公司阿里巴巴計劃發布 32B 版本的編碼器,旨在匹配最先進的閉源性能。較低數量的 32B 模型將適合可以運行 Codestral 的機器。開源編碼 LLM 領域無異于令人振奮。
?
還有哪些開源模型?
Llama 3 到 Llama 3.1、Llama 3.2、Llama 3.3 系列模型在參數規模、上下文長度和性能上不斷突破壁壘,Llama 3.1 405B 版本成為最大的開源大型語言模型之一。
?
llama 3.2 1B/3B/11B/90B
發布日期:9月 26, 2024
型號變體:llama 3.2 1B、llama 3.2 3B、llama 3.2 11B 和llama 3.2 90B
詳細信息: Llama 3.2 發布了中小型視覺 LLM(11B 和 90B),以及適用于邊緣和移動設備的輕量級純文本模型(1B 和 3B),包括預訓練和指令調整版本。這些模型支持 128K 上下文長度,并針對 Arm 處理器進行了優化,適用于本地摘要、指令跟蹤和重寫任務。
?
llama 3.3 70B
發布日期:12月 7, 2024
型號變體:llama 3.3 70B
詳細信息: Llama 3.3 是 Llama 系列的最新版本,進一步提高了模型效率和性能。Llama 3.3 在多語言功能、代碼生成和復雜數學問題解決方面取得了重大進步,參數規模達到 405B,接近或超過市場上其他領先模型的性能。
這些開源模型版本反映了 Meta 對開放 AI 生態系統的承諾,為研究人員和開發人員提供強大的工具,推動人工智能技術的進步。
?
?