- Meta, Llama 2 tabanlı, koda özel modeli Code Llama’yı yayımladı; araştırma ve ticari kullanım için ücretsiz sundu ve aynı topluluk lisansını uyguladı
- Code Llama hem kod hem de doğal dil prompt’larını alarak kod üretme, tamamlama ve hata ayıklamayı destekliyor; Python, C++, Java, PHP, TypeScript, C#, Bash gibi dilleri kapsıyor
- Model boyutları 7B, 13B, 34B, 70B olarak ayrılıyor; küçük modeller düşük gecikme için avantajlıyken 34B ve 70B daha iyi kodlama desteğini hedefliyor
- Temel model, Python’a özel model ve doğal dil yönergelerini anlamaya uyarlanmış Instruct varyantı sunuluyor; gerçek kod üretiminde Instruct kullanımı öneriliyor
- Code Llama 34B, Meta’nın kendi değerlendirmesinde HumanEval %53,7, MBPP %56,2 kaydetti; herkese açık, koda özel modeller aracılığıyla topluluk değerlendirmesini ve güvenlik açıklarının iyileştirilmesini teşvik etmeyi amaçlayan bir yaklaşım
Yayınlama biçimi ve 70B güncellemesi
- Meta, metin prompt’larıyla kod üretebilen büyük dil modeli Code Llama’yı yayımladı
- Code Llama, herkese açık kullanılabilen kod odaklı LLM’ler içinde en ileri performansı hedefliyor; geliştirici iş akışlarını daha hızlı ve verimli hâle getirmeye, kodlama öğrenenlerin giriş bariyerini düşürmeye odaklanıyor
- Araştırma ve ticari kullanım için ücretsiz sunuluyor ve Llama 2 ile aynı topluluk lisansı altında dağıtılıyor
- 29 Ocak 2024 güncellemesiyle Code Llama ailesinin en büyük ve en yüksek performanslı modeli Code Llama 70B eklendi
- CodeLlama - 70B: temel kod modeli
- CodeLlama - 70B - Python: Python’a özel 70B model
- Code Llama - 70B - Instruct: doğal dil yönergelerini anlamaya göre ince ayarlanmış 70B model
Llama 2’nin kod görevlerine uyarlanmış modeli
- Code Llama, Llama 2’nin koda özel bir veri kümesiyle ek eğitilmiş koda özel sürümüdür
- Hem kodu hem de doğal dil prompt’larını girdi olarak alıp çeşitli kodlama görevlerinde kullanılabilir
- Kod üretme
- Kod hakkında doğal dil üretme
- Kod tamamlama
- Hata ayıklama
- Örnek bir prompt, “Fibonacci dizisini yazdıran bir fonksiyon yaz” gibi doğal dilde bir istektir
- Desteklenen diller arasında Python, C++, Java, PHP, TypeScript(JavaScript), C#, Bash bulunur
Model boyutları, eğitim verileri ve gecikme süresi seçimi
- Code Llama, 7B, 13B, 34B, 70B parametre boyutlarında sunuluyor
- 70B dışındaki modeller, kod ve kodla ilgili verilerden oluşan 500B token ile eğitildi; 70B ise 1T token ile eğitildi
- 7B ve 13B’nin temel ve Instruct modelleri, mevcut kodun ortasına yeni kod ekleyebilmeyi sağlayan fill-in-the-middle(FIM) özelliğiyle eğitildi
- Anlık kod tamamlama gibi görevleri destekler
- Model boyutlarına göre sunum maliyeti ve gecikme özellikleri farklılık gösterir
- 7B modeli tek bir GPU’da sunulabilir
- 34B ve 70B en iyi sonuçları ve daha iyi kodlama desteğini sağlar
- 7B ve 13B daha hızlı olduğundan gerçek zamanlı kod tamamlama gibi düşük gecikme gerektiren işler için daha uygundur
- Code Llama modelleri, en fazla 100.000 token bağlam içinde kararlı üretim sağlar
- Tüm modeller 16.000 token dizileriyle eğitildi
- En fazla 100.000 token girdide iyileşme gösterir
- Uzun girdi dizileri, uzun programlar üretmenin yanı sıra kod tabanının daha fazla bağlamını modele aktararak üretim sonuçlarının alakalılığını artırmaya yardımcı olur
- Büyük ölçekli kod tabanı hata ayıklamasında belirli bir sorunla ilgili tüm kodu kavramak zor olabileceğinden, geliştiriciler büyük kod parçalarının tamamını modele verebilir
Temel, Python ve Instruct olmak üzere üç varyant
- Code Llama ailesi, temel modelin yanı sıra Python’a özel model ve Instruct varyantını içerir
- Code Llama - Python, Python kodundan oluşan 100B token ile ayrıca ince ayarlanmış dile özel bir modeldir
- Python, kod üretiminde en çok benchmark edilen dildir
- Python ve PyTorch, yapay zeka topluluğunda önemli rol oynar
- Code Llama - Instruct, yönerge ince ayarı ve hizalama sürecinden geçirilmiş bir varyanttır
- Doğal dil yönerge girdileri ve beklenen çıktılar kullanılarak eğitime devam edilir
- İnsanların prompt’larda beklediği sonucu daha iyi anlamak üzere tasarlanmıştır
- Gerçek kod üretiminde Code Llama - Instruct kullanımı önerilir
- Çünkü doğal dilde faydalı ve güvenli yanıtlar üretmek üzere ince ayarlanmıştır
- Code Llama ve Code Llama - Python, genel doğal dil görevleri için önerilmez
- İki model de doğal dil yönergelerini takip etmek üzere tasarlanmamıştır
- Code Llama, koda özel görevler içindir ve başka görevler için temel model olarak uygun değildir
- Kullanıcılar lisansa ve kabul edilebilir kullanım politikasına uymalıdır
Benchmark ve güvenlik değerlendirmesi
- Meta, Code Llama performansını değerlendirmek için HumanEval ve MBPP benchmark’larını kullandı
- Meta’nın kendi benchmark’larında Code Llama, açık kaynak koda özel LLM’lerden ve Llama 2’den daha iyi performans gösterdi
- Code Llama 34B, HumanEval %53,7, MBPP %56,2 kaydetti
- Diğer en ileri herkese açık çözümlerle karşılaştırıldığında en yüksek puandı
- ChatGPT ile eşdeğer düzeyde değerlendirildi
- Yayınlanmadan önce çeşitli güvenlik önlemleri uygulandı ve red team sürecinde kötü amaçlı kod üretme riski nicel olarak değerlendirildi
- Açık bir niyetle kötü amaçlı kod isteyen prompt’lar oluşturuldu
- Code Llama yanıtları ChatGPT(GPT3.5 Turbo) yanıtlarıyla karşılaştırılıp puanlandı
- Sonuçlara göre Code Llama daha güvenli yanıtlar verdi
- Sorumlu yapay zeka, saldırı güvenliği mühendisliği, kötü amaçlı yazılım geliştirme ve yazılım mühendisliği alanlarındaki uzmanların red team ayrıntıları araştırma makalesinde görülebilir
Yayınlanan kaynaklar ve sorumlu kullanım
- Geliştiriciler yeni yazılım yazmaktan mevcut kodda hata ayıklamaya kadar çeşitli görevlerde zaten LLM kullanıyor
- Code Llama, geliştirici iş akışlarını daha verimli hâle getirerek geliştiricilerin tekrarlı işlerden ziyade daha insan odaklı görevlere odaklanmasını amaçlıyor
- Meta, kodlama için LLM’lerin inovasyon ve güvenlik açısından açık yaklaşımın faydalarından büyük ölçüde yararlanabileceğini düşünüyor
- Herkese açık, koda özel modeller; topluluğun model yeteneklerini değerlendirmesini, sorunları bulmasını ve güvenlik açıklarını düzeltmesini sağlar
- Code Llama’nın eğitim reçetesi GitHub deposunda yayımlandı
- Model ağırlıkları Llama sayfasında sunuluyor
- Araştırma makalesi, geliştirme ayrıntılarını, benchmark test yöntemlerini, sınırlamaları, bilinen sorunları, azaltım önlemlerini ve gelecekte araştırılacak konuları içerir
- Responsible Use Guide da güncellendi ve downstream modellerin sorumlu biçimde geliştirilmesi için yönergeler sunuyor
- İçerik politikası ve azaltım önlemlerinin tanımlanması
- Veri hazırlama
- Model ince ayarı
- Performans değerlendirmesi ve iyileştirme
- Girdi ve çıktı düzeyinde risklere yanıt
- Kullanıcı etkileşimlerinde şeffaflık ve raporlama mekanizmaları kurma
- Geliştiriciler modeli koda özel değerlendirme benchmark’larıyla değerlendirmeli; kötü amaçlı yazılım, bilgisayar virüsü ve zararlı kod üretimi gibi kullanım senaryoları için güvenlik araştırmaları yapmalıdır
- Otomatik ve insan değerlendirmesi için güvenlik veri kümelerinin kullanılması ve hasmane prompt tabanlı red team çalışması da önerilir
Sonraki adımlar ve başvuru kaynakları
- Code Llama; araştırma, sanayi, açık kaynak projeleri, NGO’lar ve şirketler dahil olmak üzere farklı alanlardaki yazılım mühendislerini desteklemek için tasarlandı
- Temel modelin ve Instruct modelinin sunabildiğinden daha fazla kullanım senaryosu hâlâ mevcut
- Meta, Code Llama’nın başkalarının Llama 2’den yararlanarak araştırma ve ticari ürünler için yeni araçlar geliştirmesine vesile olmasını umuyor
- İlgili kaynaklar
1 yorum
Hacker News görüşleri
llama.cpp ile neredeyse hemen çalışıyor, bu yüzden yerelde kolayca denenebiliyor: https://github.com/ggerganov/llama.cpp/issues/2766
CodeLlama-7b-Python’ı q4_0 kuantizasyonla çalıştırınca, “ilk 10 asal sayıyı yazdır” şeklindeki Python prompt’u için
print_primes,is_prime,mainiçeren makul görünen bir kod ürettiDaha büyük modellerin, özellikle topluluk ince ayarları ve daha iyi bağlam/prompt’lardan sonra nasıl sonuçlar vereceğini görmek ilginç olacak
primes_upto(limit: int)içinde bileşik sayıları bir boole dizisiyle işaretleyipitertools.isliceile yalnızca ilk 10’u yazdırınca2 3 5 7 11 13 17 19 23 29elde ediliyorprint("1, 2, 3, 5, 7, 11... and so on!Llama2 de bir aydan uzun süre önce çıkmıştı ama haftalardır erişim bekliyorum; bu model de aynı formdan geçtiği için pek umutlu değilim
Başka bir yolla mı aldığını merak ediyorum
Elbette bu neredeyse bir tanım meselesi ve 1’i asal kabul eden topluluklar veya alanlar olabilir; ama dil modelleri kullanırken bu tür incelikler ortaya çıkıyor
¹) https://www.google.com/search?q=is+1+a+prime+number
Bana kalırsa asıl nokta, 100.000 token’a kadar bağlamda kararlı üretim sunması
Tüm modeller 16.000 token’lık dizilerle eğitilmiş ve 100.000 token’a kadar girdilerde de iyileşme gösterdiği söyleniyor
Ancak makaleyi okuyunca, kilit bilgiyi bulma doğruluğunun 16k token’dan sonra belirgin biçimde kötüleştiğini gördüm; bu yüzden 100k bağlamın pratikte ne kadar yararlı olacağını henüz görmek gerek
Makalede Unnatural Code Llama geçiyor; MBPP pass@100’de Code Llama Python’a az farkla kaybettiği ve HumanEval pass@1’de GPT-4’e az farkla geride kaldığı durumlar dışında tüm benchmark’larda diğer modelleri/ince ayarları eziyor
Meta daha sonra bu modeli yayımlamayacağını söylemekle yetinip açıklama yapmıyor; bu yüzden bu kadar etkileyici görünen bir modeli neden çıkarmadıklarını merak ediyorum
100k genişliğinde Transformer katmanlarını dümdüz kullanmak maliyet açısından imkânsız olmalı; acaba nasıl bir numara kullandılar
Code Llama’nın 7B modeli bile Copilot’un arkasındaki model olan Codex ile rekabet edebilir görünüyor
https://ai.meta.com/blog/code-llama-large-language-model-cod...
GitHub da “Copilot X” ile GPT-4 tarafına geçeceğini birkaç kez söyledi[1][2]
[0] https://github.blog/2023-07-28-smarter-more-efficient-coding...
[1] https://github.com/features/preview/copilot-x
[2] https://github.blog/2023-07-20-github-copilot-chat-beta-now-...
Kod yazarken “böyle rastgele bir şeyi nasıl yaparım?” türü sorular için 7B’yi terminal sekmesinde sürekli açık tutuyorum; kişisel olarak neredeyse Google/Stack Overflow’un yerini aldı
Code Llama Python Python’a özel olarak ayarlandığı için çok ilginç
Rust genelinde iyi olan bir model, Linux genelinde iyi olan bir model, genomik genelinde iyi olan bir model, fiziksel modelleme genelinde iyi olan bir model gibi belirli alanlara yönelik LLM’ler yapıp bunları birbirleriyle konuşturarak sorunları iş birliğiyle çözdürmek mümkün olur mu merak ediyorum
Makineleri gerçekten çalıştıran epey çılgın bir gelecek gibi olur
Ancak çok sayıda küçük model kullanmaktansa birkaç büyük model kullanma biçiminde olması daha olası
Birkaç ay önce Godot betikleri için benzer bir deneme yapılmıştı ve oldukça iyi olduğu söyleniyor: https://github.com/minosvasilias/godot-dodo
Daha fazla deneme olmamasının nedeni bence temel Llama’nın diğer güçlü yanlarına kıyasla kodlamada pek iyi olmaması ve Starcoder gibi şeylerin nispeten gölgede kalmasıydı
Henüz bilmiyorsanız Society of Mind’ı aratmanız iyi olur
C yeterince düşük seviyeli, ama nadir anlarda hâlâ okunabilir
En iyi model olan Unnatural Code Llama yayımlanmadı
Muhtemelen GPT-4 tabanlı verilerle eğitildiği ve bunun OpenAI kullanım şartlarını ihlal edebileceği için
“Unnatural” makalesine[1] göre “unnatural” veri, bir LLM’in yardımıyla oluşturuluyor; mümkünse de en iyi LLM’i kullanmak isterlerdi
[1] https://arxiv.org/pdf/2212.09689.pdf
TheBloke şaka değil[1]
Bugün içinde kuantize sürümlerin çıkacağını düşünüyorum; 3090’a tam sığacak gibi görünen 34B Python 4 bit kuantize modeli deneme fikri beni çok heyecanlandırıyor
[1] https://huggingface.co/TheBloke/CodeLlama-13B-Python-fp16
ollama run codellama:7b-instructhttps://ollama.ai/blog/run-code-llama-locally
Daha fazla model şu anda da yükleniyor: https://ollama.ai/library/codellama
Code Llama’yı yerelde çalıştırmak için 7B parametreli kuantize sürümü açık kaynak araç Ollama ile indirip çalıştırabilirsiniz: https://github.com/jmorganca/ollama
ollama run codellama "write a python function to add two numbers"Tamamlama modeli, Python modeli ve daha farklı parametre sayılarına sahip modeller de yakında eklenecek
100.000 token’lık bağlam penceresi fena değil ama 100K token’dan büyük kod tabanları ile çalışırken yerleşik bir kod modelinin hangi bağlamı seçeceğini merak ediyorum
Böyle araçların yaygın kullanıldığını ve bunlara bağımlılığın arttığını bilerek kod yazarsak yeni değerlendirmeler ortaya çıkar mı, onu da merak ediyorum
Daha fazla mı yoksa daha az mı yorum yazmalıyız, daha az token harcasın diye daha kısa ve daha az okunabilir kod mu yazmalıyız, dosya yapısını ya da adlandırma kurallarını mı değiştirmeliyiz; sonuçta bu araçlardan en iyi şekilde yararlanmak için nasıl uyum sağlamamız gerektiğini merak ediyorum
Kodu bağlamdan bağımsız ve daha az token kullanacak şekilde kısaltmak mümkün olabilir ama bu hem insanlar hem de dil modelleri için daha kafa karıştırıcı olur
Uç bir örnek olarak yalnızca
i,j,kgibi tek harfli fonksiyon ve değişkenler kullanırsanız model hiçbir şey çıkaramaz ve rastgele saçmalıklar üretirÇözüm, karmaşıklığı zaten yönettiğimiz şekilde büyük işleri küçük kara kutu modüllere ve API’lere bölmek; token’ı çok tüketen uygulama ayrıntılarını gizleyip kullanımla ilgisiz hale getirmek
LLM’e fonksiyon imzasını, iyi bir açıklamayı ve birkaç kullanım örneğini verirseniz, implementasyonu bilmeden de o fonksiyonu kullanabilir
Kısalık, bağlam uzunluğu sorununu çözmek yerine yalnızca LLM’in kod işleme becerisini düşürür; en iyi durumda bile ölçeklenmez
100k token yeterince fazla, bu yüzden böyle şeyler yapmaya gerek yok
Bu bilgi LLM’e gösterilmeye uygun şekilde sıkıştırılabilir
Örneğin bir C++ sınıfı içindeki metot implementasyonunu üretmek için LLM’e, o sınıf derlenirken derleyicinin göreceği header dosyasının sıkıştırılmış bir sürümü verilebilir
Boşlukları ve yorumları kaldırıp makroları azaltırsanız çok sayıda token tasarrufu sağlanabilir
Standart kütüphane header’ları, ince ayar sürecinde LLM’in muhtemelen iyi bildiği şeyler olduğundan çıkarılabilir
Tipik bir ön işlenmiş C++ dosyası, bir miktar optimize edilse bile 100K sınırına dayanabilir; bu nedenle LLM’e vermeden önce ek arıtma yapan bir middleware kesinlikle gerekli
Model daha iyi çıkarımlar ve öneriler yapıyor
Veride de benzer şekilde, düzgün etiketlenmiş veri ve açıklayıcı alan adları LLM yanıtlarını çok daha kullanışlı hale getiriyor
Bu araçların yaygınlaşmasının, iş arkadaşlarımın sonunda koda yorum yazmasını ve üç harfli değişken adları kullanmayı bırakmasını içten içe umuyorum
GPT-4’e hangi dosyaların verileceğini seçme yöntemi embedding tabanlıydı
Her dosyanın embedding’i ile talimattan oluşturulan embedding’e basit bir işlem uygulayıp en ilgili görünen dosyaları seçiyordum
Mükemmel değildi ama orta ölçekli kod tabanlarında çoğunlukla yeterliydi; çok büyük kod tabanları için uygun değildi
Bu implementasyon yüzünden dosyaları daha kısa yapmaya ve içerikleri başka dosyalara taşımaya başladım
1.000 satırı aşan dosyalar bağlam penceresinin tamamını tükettiği için büyük bir yüktü; 100k bağlam penceresinde bu daha az sorun olur ama dosyaları zaten kısa tutmanın iyi olduğunu düşünüyorum
Tüm dosya yerine tek tek fonksiyonları/sınıfları embedding olarak verip iletmek gibi daha akıllı yöntemler de var; yakında birileri daha iyisini yapacaktır
Yapay zekadan yararlanmak için kodlama kalıplarını değiştirme ihtiyacının çok az olması muhtemel
Bölünmüş kodu tek bir büyük dosyada birleştirmek, yorumları azaltmak ve boşlukları kaldırmak LLM için bir ön işlemcinin yapabileceği işler
Copilot şimdiye kadar iyi çalıştı, ancak arayüzü sınırlayıcı
Sanki yalnızca bir sonraki metin parçasını tahmin etmeyi biliyor gibi görünüyor
“Bu satırlar tekrar ediyor, bunları bir fonksiyona çıkarmak daha iyi olur”, “Bu yapı şöyle değiştirilirse kullanımı kolaylaşır” gibi refactoring önerileri sunan bir kod yapay zekasını kimin geliştirdiğini merak ediyorum
Cody.dev’de tüm depo için embedding’ler oluşturulabiliyor; böylece codebase ve çözmeye çalıştığınız sorun hakkında çok daha geniş bir bağlama sahip olabiliyor
Bu arada birkaç hafta önce Sourcegraph’e katıldım
Henüz sağlam bir şey olduğunu düşünmüyorum
Kodu vurgulayıp istekte bulunmanız yeterli; Code Llama kullanımı da destekleniyor: https://continue.dev/docs/walkthroughs/codellama
IntelliJ IDEA zaten yerelde ikisini de memnuniyetle öneriyor
Büyük yinelenen kod bloklarını bulup otomatik olarak fonksiyona refactor edebiliyor ve kodu daha anlaşılır hâle getiren refactoring’ler öneren birçok inspection da var
En son duyduğumda beta aşamasındaydı ve iyi çalışmıyordu
Örnek sayfasında bile “add types” fırçası
avebiçinnullkontrolü yaptığı için fazla katı, “fix simple bug” ise daha çok bir yazım hatasına yakınBu tür modelleri hiç doğrudan çalıştırmamış tam bir acemi olarak hangi donanımın gerektiğini merak ediyorum
README’de pek bulamadım
Kaynak kodunu büyük teknoloji şirketlerine yüklemeden böyle modelleri kullanabilme fikri gerçekten hoşuma gidiyor
Uygulamayı kurup birkaç shell komutu çalıştırmak yeterli
Muhtemelen bu model de yakında sunulur ve o zaman Continue VS Code eklentisiyle birlikte kullanılabilir gibi görünüyor
Biraz yavaş olsa da, gereken büyük RAM olmasa bile swap yeterli bir alternatif olmuş gibi
Ollama, 13B modeli çalıştırmak için 32GB gerektiğini söylüyor ama 16GB MBP’de
llama2:13bmodelini çalıştırıyorum7B ise akıllı bir tost makinesinde bile çalışabilecek düzeyde
Aksi hâlde llama.cpp CPU inference çoğu makinede çalışacaktır