- Meta merilis Code Llama, model khusus kode berbasis Llama 2, dan menyediakannya gratis untuk penggunaan riset maupun komersial dengan lisensi komunitas yang sama
- Code Llama menerima prompt kode dan bahasa alami, serta mendukung pembuatan, pelengkapan, dan debugging kode untuk Python, C++, Java, PHP, TypeScript, C#, Bash, dan lainnya
- Ukuran model dibagi menjadi 7B, 13B, 34B, 70B; model yang lebih kecil unggul dalam latensi rendah, sementara 34B dan 70B ditujukan untuk dukungan coding yang lebih baik
- Tersedia model dasar, model khusus Python, dan varian Instruct yang disesuaikan untuk memahami instruksi bahasa alami; untuk pembuatan kode nyata, penggunaan Instruct direkomendasikan
- Dalam evaluasi internal, Code Llama 34B mencatat HumanEval 53.7% dan MBPP 56.2%, dengan pendekatan yang mendorong evaluasi komunitas serta perbaikan kerentanan melalui model kode terbuka
Cara rilis dan pembaruan 70B
- Meta merilis Code Llama, model bahasa besar yang dapat menghasilkan kode dari prompt teks
- Code Llama menargetkan performa mutakhir di antara LLM kode yang tersedia secara terbuka, dengan fokus mempercepat dan mengefisienkan alur kerja developer serta menurunkan hambatan masuk bagi pembelajar coding
- Tersedia gratis untuk penggunaan riset dan komersial, dan didistribusikan dengan lisensi komunitas yang sama seperti Llama 2
- Dalam pembaruan 29 Januari 2024, ditambahkan Code Llama 70B, model terbesar dan berkinerja terbaik di keluarga Code Llama
- CodeLlama - 70B: model kode dasar
- CodeLlama - 70B - Python: model 70B khusus Python
- Code Llama - 70B - Instruct: model 70B yang di-fine-tune untuk memahami instruksi bahasa alami
Model Llama 2 yang disesuaikan untuk pekerjaan kode
- Code Llama adalah versi khusus kode dari Llama 2 yang dilatih tambahan pada dataset khusus kode
- Model ini menerima prompt kode maupun bahasa alami sebagai input dan dapat digunakan untuk berbagai tugas coding
- pembuatan kode
- pembuatan bahasa alami tentang kode
- pelengkapan kode
- debugging
- Contoh prompt adalah permintaan bahasa alami seperti “tolong buat fungsi yang mencetak deret Fibonacci”
- Bahasa yang didukung mencakup Python, C++, Java, PHP, TypeScript(JavaScript), C#, Bash
Ukuran model, data pelatihan, dan pilihan latensi
- Code Llama tersedia dalam ukuran parameter 7B, 13B, 34B, 70B
- Selain 70B, model dilatih dengan 500B token data kode dan data terkait kode, sedangkan 70B dilatih dengan 1T token
- Model dasar dan Instruct 7B serta 13B dilatih dengan fitur fill-in-the-middle(FIM) sehingga dapat menyisipkan kode baru di tengah kode yang sudah ada
- Ini mendukung tugas seperti pelengkapan kode instan
- Setiap ukuran model memiliki karakteristik biaya serving dan latensi yang berbeda
- Model 7B dapat di-serving pada satu GPU
- 34B dan 70B memberikan hasil terbaik dan dukungan coding yang lebih baik
- 7B dan 13B lebih cepat, sehingga lebih cocok untuk tugas yang membutuhkan latensi rendah seperti pelengkapan kode real-time
- Model Code Llama memberikan generasi yang stabil hingga konteks 100.000 token
- Semua model dilatih dengan sekuens 16.000 token
- Menunjukkan peningkatan pada input hingga 100.000 token
- Sekuens input yang panjang membantu bukan hanya untuk menghasilkan program yang panjang, tetapi juga untuk memberi model lebih banyak konteks dari codebase sehingga relevansi hasil generasi meningkat
- Dalam debugging codebase besar, bisa sulit untuk memahami semua kode yang terkait dengan isu tertentu, sehingga developer dapat memberikan keseluruhan potongan kode besar ke model
Tiga varian: dasar, Python, dan Instruct
- Keluarga Code Llama mencakup model dasar, model khusus Python, dan varian Instruct
- Code Llama - Python adalah model khusus bahasa yang di-fine-tune tambahan dengan 100B token kode Python
- Python adalah bahasa yang paling sering dijadikan benchmark dalam pembuatan kode
- Python dan PyTorch memainkan peran penting dalam komunitas AI
- Code Llama - Instruct adalah varian yang melalui instruction fine-tuning dan alignment
- Pelatihan dilanjutkan menggunakan input instruksi bahasa alami dan output yang diharapkan
- Dirancang agar lebih memahami hasil yang diharapkan manusia dari sebuah prompt
- Untuk pembuatan kode nyata, penggunaan Code Llama - Instruct direkomendasikan
- Karena model ini di-fine-tune untuk menghasilkan jawaban yang berguna dan aman dalam bahasa alami
- Code Llama dan Code Llama - Python tidak direkomendasikan untuk tugas bahasa alami umum
- Kedua model tersebut tidak dirancang untuk mengikuti instruksi bahasa alami
- Code Llama ditujukan untuk tugas khusus kode dan tidak cocok sebagai model dasar untuk tugas lain
- Pengguna harus mematuhi lisensi dan kebijakan penggunaan yang diizinkan
Benchmark dan evaluasi keamanan
- Meta menggunakan benchmark HumanEval dan MBPP untuk mengevaluasi performa Code Llama
- Dalam benchmark internal, Code Llama menunjukkan performa yang lebih baik dibanding LLM khusus kode open-source dan Llama 2
- Code Llama 34B mencatat HumanEval 53.7% dan MBPP 56.2%
- Itu merupakan skor tertinggi dibanding solusi terbuka mutakhir lainnya
- Dinilai setara dengan ChatGPT
- Sebelum dirilis, berbagai langkah keamanan telah diterapkan, dan proses red team digunakan untuk mengevaluasi secara kuantitatif risiko pembuatan malware
- Dibuat prompt yang secara jelas meminta kode berbahaya
- Respons Code Llama dinilai dengan membandingkannya terhadap respons ChatGPT(GPT3.5 Turbo)
- Hasilnya menunjukkan Code Llama memberikan respons yang lebih aman
- Rincian red team oleh pakar di bidang AI yang bertanggung jawab, offensive security engineering, pengembangan malware, dan software engineering dapat dilihat di makalah riset
Materi publik dan penggunaan yang bertanggung jawab
- Developer sudah menggunakan LLM untuk berbagai tugas, mulai dari menulis software baru hingga debugging kode yang sudah ada
- Code Llama bertujuan membuat alur kerja developer lebih efisien agar mereka dapat lebih fokus pada pekerjaan yang berpusat pada manusia daripada tugas berulang
- Meta menilai bahwa LLM untuk coding dapat memperoleh manfaat besar dari pendekatan terbuka dalam hal inovasi dan keamanan
- Model khusus kode yang terbuka memungkinkan komunitas mengevaluasi kemampuan model, menemukan masalah, dan memperbaiki kerentanan
- Resep pelatihan Code Llama dipublikasikan di repositori GitHub
- Bobot model tersedia di halaman Llama
- Makalah riset mencakup detail pengembangan, cara pengujian benchmark, keterbatasan, tantangan yang diketahui, langkah mitigasi, dan tugas investigasi berikutnya
- Responsible Use Guide juga diperbarui untuk memberikan panduan pengembangan model downstream secara bertanggung jawab
- definisi kebijakan konten dan langkah mitigasi
- persiapan data
- fine-tuning model
- evaluasi dan peningkatan performa
- penanganan risiko pada tingkat input dan output
- membangun transparansi dan mekanisme pelaporan dalam interaksi pengguna
- Developer perlu mengevaluasi model dengan benchmark evaluasi khusus kode, serta melakukan riset keamanan untuk use case seperti pembuatan malware, virus komputer, dan kode berbahaya
- Pemanfaatan dataset keamanan untuk evaluasi otomatis dan manusia, serta red team berbasis adversarial prompt juga direkomendasikan
Langkah berikutnya dan materi referensi
- Code Llama dirancang untuk mendukung software engineer di berbagai sektor seperti riset, industri, proyek open-source, NGO, dan perusahaan
- Masih ada lebih banyak use case yang tersisa di luar apa yang dapat diberikan model dasar dan model Instruct
- Meta berharap Code Llama dapat menjadi pemicu bagi pihak lain untuk memanfaatkan Llama 2 dalam membuat alat baru untuk riset dan produk komersial
- Materi terkait
1 komentar
Opini Hacker News
Hampir langsung berjalan dengan llama.cpp, jadi mudah dicoba secara lokal: https://github.com/ggerganov/llama.cpp/issues/2766
Saat menjalankan CodeLlama-7b-Python dengan kuantisasi q4_0, untuk prompt Python “cetak 10 bilangan prima pertama”, model menghasilkan kode yang cukup meyakinkan, termasuk
print_primes,is_prime, danmainMenarik untuk melihat bagaimana hasil model yang lebih besar, terutama setelah tuning komunitas serta konteks/prompt yang lebih baik
Di
primes_upto(limit: int), tandai bilangan komposit dengan array boolean, lalu cetak hanya 10 pertama denganitertools.islice, maka hasilnya2 3 5 7 11 13 17 19 23 29print("1, 2, 3, 5, 7, 11... and so on!Llama2 juga sudah dirilis lebih dari sebulan lalu, tapi saya masih menunggu akses selama berminggu-minggu; karena model ini juga lewat formulir yang sama, saya tidak terlalu berharap
Penasaran apakah mereka mendapatkannya lewat cara lain
Tentu saja ini nyaris soal definisi, dan mungkin ada komunitas atau bidang yang menganggap 1 sebagai bilangan prima, tetapi saat memakai model bahasa, nuansa seperti ini muncul
¹) https://www.google.com/search?q=is+1+a+prime+number
Menurut saya, poin utamanya adalah kemampuannya memberikan generasi yang stabil pada konteks hingga 100.000 token
Semua model dilatih dengan sekuens 16.000 token, dan katanya menunjukkan peningkatan bahkan pada input hingga 100.000 token
Namun setelah membaca paper-nya, akurasi pencarian informasi kunci memburuk tajam setelah 16k token, jadi masih perlu dilihat seberapa berguna konteks 100k itu dalam praktik
Paper tersebut menyebut Unnatural Code Llama, yang mengungguli model/fine-tuning lain di semua benchmark kecuali kalah tipis dari Code Llama Python pada MBPP pass@100 dan kalah tipis dari GPT-4 pada HumanEval pass@1
Meta hanya mengatakan tidak akan merilis model ini nanti tanpa penjelasan, jadi saya penasaran mengapa mereka tidak merilis model yang tampak sehebat itu
Memakai lapisan Transformer selebar 100k begitu saja seharusnya mustahil dari sisi biaya; trik apa yang mereka gunakan?
Bahkan model 7B Code Llama tampaknya kompetitif dengan Codex, model di balik Copilot
https://ai.meta.com/blog/code-llama-large-language-model-cod...
GitHub juga beberapa kali mengatakan bahwa mereka bergerak ke arah GPT-4 bersama “Copilot X”[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-...
Saat coding, saya terus membuka 7B di tab terminal untuk pertanyaan seperti “bagaimana melakukan hal acak seperti ini?”, dan bagi saya pribadi ia hampir menggantikan Google/Stack Overflow
Code Llama Python sangat menarik karena dituning khusus untuk Python
Saya penasaran apakah kita bisa membuat LLM khusus bidang tertentu—seperti model yang mahir Rust secara umum, model yang mahir Linux secara umum, model yang mahir genomika secara umum, atau model yang mahir pemodelan fisika secara umum—lalu membuat mereka saling berdialog dan memecahkan masalah secara kolaboratif
Sepertinya ini akan menjadi masa depan yang cukup gila, saat mesin benar-benar dibuat bekerja
Namun kemungkinan besar caranya bukan memakai banyak model kecil, melainkan beberapa model besar
Beberapa bulan lalu ada upaya serupa untuk skrip Godot, dan kabarnya cukup bagus: https://github.com/minosvasilias/godot-dodo
Menurut saya belum banyak upaya lain karena Llama dasar tidak terlalu bagus dalam coding dibanding kekuatan lainnya, dan hal-hal seperti Starcoder relatif tenggelam
Kalau belum tahu, ada baiknya mencari Society of Mind
C cukup low-level, tetapi pada momen tertentu yang jarang terjadi masih bisa dibaca
Model terbaik, Unnatural Code Llama, tidak dirilis
Kemungkinan besar karena dilatih dengan data berbasis GPT-4 sehingga bisa melanggar ketentuan penggunaan OpenAI
Menurut makalah “Unnatural”[1], data “unnatural” dibuat dengan bantuan suatu LLM, dan jika memungkinkan orang tentu ingin memakai LLM terbaik
[1] https://arxiv.org/pdf/2212.09689.pdf
TheBloke bukan main-main[1]
Sepertinya versi-versi terkuantisasinya akan muncul hari ini, dan saya sangat menantikan mencoba model 34B Python kuantisasi 4-bit yang tampaknya pas masuk di 3090
[1] https://huggingface.co/TheBloke/CodeLlama-13B-Python-fp16
ollama run codellama:7b-instructhttps://ollama.ai/blog/run-code-llama-locally
Lebih banyak model juga sedang diunggah: https://ollama.ai/library/codellama
Untuk menjalankan Code Llama secara lokal, Anda bisa mengunduh dan menjalankan versi terkuantisasi parameter 7B dengan tool open-source Ollama: https://github.com/jmorganca/ollama
ollama run codellama "write a python function to add two numbers"Model untuk completion, model Python, dan model dengan jumlah parameter yang lebih beragam juga akan segera ditambahkan
Jendela konteks 100.000 token memang lumayan, tetapi saya penasaran konteks seperti apa yang akan dipilih model kode tertanam saat menangani codebase yang lebih besar dari 100K token
Saya juga penasaran apakah akan muncul hal-hal baru yang perlu dipertimbangkan jika kita menulis kode dengan kesadaran bahwa tool seperti ini akan digunakan luas dan makin diandalkan
Apakah kita harus menulis lebih banyak atau lebih sedikit komentar, menulis kode yang lebih pendek dan kurang mudah dibaca agar memakai token lebih sedikit, mengubah struktur file atau konvensi penamaan, dan pada akhirnya bagaimana kita harus beradaptasi agar bisa memanfaatkan tool seperti ini semaksimal mungkin
Kode memang bisa dibuat lebih bebas konteks dan dipadatkan agar memakai lebih sedikit token, tetapi itu justru membuatnya lebih membingungkan bagi manusia maupun model bahasa
Secara ekstrem, kalau hanya memakai fungsi dan variabel satu huruf seperti
i,j,k, model tidak akan bisa menyimpulkan apa pun dan akan membuat omong kosong secara acakSolusinya adalah seperti yang sudah kita lakukan saat mengelola kompleksitas: memecah pekerjaan besar menjadi modul black-box dan API yang lebih kecil, menyembunyikan implementasi yang boros token dan membuatnya tidak relevan untuk penggunaan
Jika Anda memberi LLM signature fungsi, deskripsi yang baik, dan beberapa contoh penggunaan, ia bisa memakai fungsi itu tanpa mengetahui implementasinya
Keringkasan hanya menurunkan kemampuan LLM dalam memproses kode, tidak menyelesaikan masalah panjang konteks, dan bahkan dalam skenario terbaik pun tidak akan bisa diskalakan
100k token sudah cukup banyak, jadi tidak perlu melakukan hal seperti itu
Informasi ini bisa dikompresi agar mudah ditampilkan ke LLM
Misalnya, untuk menghasilkan implementasi metode di dalam kelas C++, Anda bisa memberi LLM versi terkompresi dari file header yang akan dilihat compiler saat mengompilasi kelas tersebut
Menghapus whitespace dan komentar serta meringkas macro bisa menghemat banyak token
Header standard library kemungkinan besar sudah cukup dikenal LLM dari proses fine-tuning, jadi mungkin bisa dihilangkan
File C++ umum yang sudah dipreproses bisa tetap mencapai batas 100K meski sudah dioptimalkan sampai tingkat tertentu, jadi middleware yang melakukan penyaringan tambahan sebelum dikirim ke LLM benar-benar diperlukan
Model dapat melakukan penalaran dan memberi saran yang lebih baik
Pada data juga serupa: data yang diberi tag dengan benar dan nama field yang deskriptif membuat jawaban LLM jauh lebih berguna
Diam-diam saya berharap penyebaran tool seperti ini akhirnya membuat rekan-rekan developer memberi komentar pada kode dan berhenti memakai nama variabel tiga huruf
Cara memilih file mana yang dimasukkan ke GPT-4 berbasis embedding
Saya memilih file yang tampak paling relevan berdasarkan embedding tiap file dan embedding yang dibuat dari instruksi, dengan sedikit pemrosesan sederhana tambahan
Tidak sempurna, tetapi untuk codebase ukuran menengah biasanya sudah cukup, dan tidak cocok untuk codebase yang sangat besar
Karena implementasi ini, saya mulai membuat file lebih pendek dan memindahkan isinya ke file lain
File lebih dari 1.000 baris terasa berat karena memakan seluruh jendela konteks; dengan jendela konteks 100k mungkin tidak separah itu, tetapi menurut saya file memang sebaiknya dijaga tetap pendek
Ada juga cara yang lebih cerdas, seperti meng-embedding dan mengirim fungsi/kelas individual alih-alih seluruh file, jadi tak lama lagi seseorang pasti akan membuat yang lebih baik
Kemungkinan besar hampir tidak perlu mengubah pola coding demi memanfaatkan AI
Menggabungkan kode yang terpecah menjadi satu file besar, mengurangi komentar, dan menghapus whitespace bisa dilakukan oleh preprocessor untuk LLM
Copilot sejauh ini bekerja dengan baik, tetapi antarmukanya menjadi batasan
Ia tampak seperti hanya tahu cara memprediksi potongan teks berikutnya
Saya penasaran siapa yang sedang membuat AI kode yang bisa menyarankan refactoring seperti “baris-baris ini berulang, sebaiknya dipisahkan menjadi fungsi” atau “struktur ini akan lebih mudah dipakai jika diubah seperti ini”
Di Cody.dev, Anda bisa membuat embedding untuk seluruh repositori, sehingga dapat memiliki konteks yang jauh lebih besar tentang codebase dan masalah yang ingin diselesaikan
Sebagai catatan, saya bergabung dengan Sourcegraph beberapa minggu lalu
Menurut saya belum ada yang benar-benar solid
Cukup highlight kode dan ajukan permintaan; juga mendukung penggunaan Code Llama: https://continue.dev/docs/walkthroughs/codellama
IntelliJ IDEA sudah dengan senang hati menyarankan keduanya secara lokal
Ia bisa menemukan blok kode duplikat yang besar dan otomatis me-refactor-nya menjadi fungsi, dan juga punya banyak inspection yang menyarankan refactoring agar kode lebih jelas
Terakhir saya dengar masih beta dan belum berjalan dengan baik
Bahkan di halaman contohnya, brush “add types” terlalu ketat karena
adanbmenjadi target pemeriksaannull, sementara “fix simple bug” lebih mirip memperbaiki typoDari sudut pandang pemula total yang belum pernah menjalankan model seperti ini sendiri, saya penasaran hardware apa yang dibutuhkan
Saya tidak berhasil menemukannya dengan jelas di README
Gagasan bahwa model seperti ini bisa dipakai tanpa mengunggah source code ke perusahaan teknologi besar benar-benar menarik bagi saya
Cukup instal aplikasinya lalu jalankan beberapa perintah shell
Kemungkinan model ini juga akan segera tersedia, dan kalau begitu sepertinya bisa dipakai bersama ekstensi Continue VS Code
Memang agak lambat, tetapi swap tampaknya menjadi pengganti yang cukup memadai meski tidak memiliki RAM besar yang dibutuhkan
Ollama mengatakan perlu 32GB untuk menjalankan model 13B, tetapi saya menjalankan model
llama2:13bdi MBP 16GB7B bahkan cukup ringan untuk berjalan di toaster pintar
Kalau tidak, inferensi CPU dengan llama.cpp kemungkinan akan berjalan di sebagian besar mesin