1 poin oleh GN⁺ 2023-08-25 | 1 komentar | Bagikan ke WhatsApp
  • 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
    • HumanEval menguji kemampuan melengkapi kode berdasarkan docstring
    • MBPP menguji kemampuan menulis kode berdasarkan deskripsi
  • 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

 
GN⁺ 2023-08-25
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, dan main
    Menarik untuk melihat bagaimana hasil model yang lebih besar, terutama setelah tuning komunitas serta konteks/prompt yang lebih baik

    • Cara yang lebih sederhana, ringkas, dan efisien bisa memakai fungsi generator dengan Sieve of Eratosthenes
      Di primes_upto(limit: int), tandai bilangan komposit dengan array boolean, lalu cetak hanya 10 pertama dengan itertools.islice, maka hasilnya 2 3 5 7 11 13 17 19 23 29
    • Kalau soalnya mencetak 10 bilangan prima pertama, bisa juga satu baris: print("1, 2, 3, 5, 7, 11... and so on!
    • Lucu melihat HN kena nerd sniping oleh mesin
    • Penasaran bagaimana mereka mendapatkan akses ke modelnya
      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
    • Seperti hasil lain di thread ini, poin menariknya adalah 1 bukan bilangan prima
      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

    • Sepertinya mereka tidak merilis model yang cukup menarik
      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
    • Penasaran apakah Meta memasukkan RoPE yang dapat diskalakan dalam implementasi resminya
    • Penasaran apa trik untuk mencapai konteks 100k
      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...

  • 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

    • Sepertinya itu disebut mixture of experts, dan banyak yang menduga GPT-4 juga memakai pendekatan seperti itu
      Namun kemungkinan besar caranya bukan memakai banyak model kecil, melainkan beberapa model besar
    • Jika ada cukup banyak kode contoh bagus dengan lisensi permisif, kita bisa fine-tune LLM di atasnya
      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
    • Rasanya seperti melihat sekilas masa depan dekat
      Kalau belum tahu, ada baiknya mencari Society of Mind
    • Saya ingin kita mulai dari CodeLlama untuk C dan mulai memperlakukan sistem seperti ini sebagai compiler bahasa alami
      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

    • Kalau memang hanya di-fine-tune dengan 15 ribu instruksi, untungnya sepertinya kita akan segera melihat model serupa buatan komunitas
  • 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 sudah mendukungnya: ollama run codellama:7b-instruct
      https://ollama.ai/blog/run-code-llama-locally
      Lebih banyak model juga sedang diunggah: https://ollama.ai/library/codellama
    • Penasaran seberapa besar performa CPU/GPU yang dibutuhkan untuk kuantisasi atau format gguf baru
    • Kalau tidak ingin menjalankannya secara lokal, penasaran apakah bisa dijalankan di suatu tempat di Hugging Face
    • Penasaran apakah bisa dikuantisasi lebih jauh agar cukup untuk dijalankan lokal di laptop pengembang biasa
  • 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

    • Itu terdengar agak bodoh
      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 acak
      Solusinya 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
    • Tool pengembang sudah memetakan seluruh codebase dengan cara yang berguna, seperti simbol yang tersedia dalam konteks saat ini dan struktur kelas
      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
    • LLM untuk coding menjadi jauh lebih berguna ketika ada komentar kode serta nama variabel/fungsi yang deskriptif
      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
    • Dulu saya membuat ekstensi VS Code yang membungkus GPT-4 dan menulis kode langsung di editor, dan saya masih menggunakannya
      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
    • Ini sepertinya tugas middleware
      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”

    • Sebaiknya coba Cody
      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
    • SourceGraph Cody dan Copilot Chat sedang bergerak ke arah itu, tetapi masih tahap awal
      Menurut saya belum ada yang benar-benar solid
    • Semua pekerjaan seperti ini bisa dilakukan dengan Continue
      Cukup highlight kode dan ajukan permintaan; juga mendukung penggunaan Code Llama: https://continue.dev/docs/walkthroughs/codellama
    • Dua pekerjaan itu bisa dilakukan tanpa AI
      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
    • Copilot menyebut ini Code Brushes: https://githubnext.com/projects/code-brushes/
      Terakhir saya dengar masih beta dan belum berjalan dengan baik
      Bahkan di halaman contohnya, brush “add types” terlalu ketat karena a dan b menjadi target pemeriksaan null, sementara “fix simple bug” lebih mirip memperbaiki typo
  • Dari 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

    • Saya mencoba menjalankan semua varian Llama 2 di Intel MacBook Pro keluaran 2020 dengan Ollama, dan itu sangat mudah
      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:13b di MBP 16GB
    • 34B mungkin bisa berjalan di kartu grafis konsumen 24GiB atau Mac 32GiB (chip M1/M2) jika memakai kuantisasi (5–6 bit)
      7B bahkan cukup ringan untuk berjalan di toaster pintar
    • Jika ingin menjalankannya dengan cepat, 13B membutuhkan GPU 12GB (mis. 3060), sedangkan 34B membutuhkan GPU 24GB (mis. 3090)
      Kalau tidak, inferensi CPU dengan llama.cpp kemungkinan akan berjalan di sebagian besar mesin