1 poin oleh GN⁺ 2023-08-13 | 1 komentar | Bagikan ke WhatsApp
  • Untuk tugas khusus yang terlalu sempit bagi LLM serbaguna, melakukan fine-tuning langsung pada Llama-2 dapat meningkatkan kualitas, biaya, dan latensi sekaligus dengan model yang lebih kecil dan lebih murah
  • Setelah fine-tuning, akurasi Llama-2 13B naik dari 58%→98% untuk representasi fungsi ViGGO, 42%→89% untuk pembuatan SQL, dan 28%→47% untuk GSM8k
  • Pada tugas yang menuntut format output penting seperti ViGGO dan pembuatan SQL, model Llama-2 kecil menghasilkan hasil yang lebih baik daripada GPT-4, tetapi pada penalaran matematika masih belum mencapai tingkat GPT-4
  • Eksperimen dilakukan dengan skrip berbasis Ray Train, Ray Data, DeepSpeed, dan Accelerate; 7B·13B dilatih pada 16xA10G, sedangkan 70B pada 32xA10G
  • Kunci peningkatan performa bukan ukuran model melainkan kualitas data dan pipeline evaluasi, dan trade-off biaya·kualitas antara prompt engineering dan fine-tuning perlu dibandingkan per tugas

Efek fine-tuning pada tiga jenis tugas

  • Model serbaguna besar seperti GPT-4 dan Claude-2 berguna untuk prototyping cepat, tetapi untuk kebutuhan yang sempit seperti peringkasan atau klasifikasi tiket dukungan, model tersebut bisa berlebihan dari sisi biaya dan performa
  • Eksperimen ini membandingkan seberapa besar peningkatan saat model Llama-2 di-fine-tune full-parameter untuk tiga tugas realistis
    • ViGGO: mengekstrak representasi fungsional dari teks tidak terstruktur
    • SQL-create-context: membuat SQL dari bahasa alami dan konteks CREATE TABLE
    • GSM8k: menyelesaikan soal matematika tingkat sekolah dasar
  • Perubahan akurasi untuk Llama-2 13B adalah sebagai berikut
    • Representasi fungsi ViGGO: 58% → 98%
    • Pembuatan SQL: 42% → 89%
    • GSM8k: 28% → 47%
  • Pada ViGGO dan pembuatan SQL, model Llama-2 kecil mengungguli GPT-4, tetapi untuk tugas penalaran matematika seperti GSM8k, hasil setelah fine-tuning masih belum menyamai performa GPT-4

Metode fine-tuning dan infrastruktur pelatihan

  • Ketiga tugas sama-sama menggunakan fine-tuning full-parameter standar
    • Dilatih dengan skema prediksi token berikutnya
    • Semua parameter model menjadi target pembaruan gradien
    • LoRA atau metode yang membekukan sebagian blok transformer tidak termasuk dalam cakupan eksperimen
  • Skrip eksperimen dibangun di atas Ray Train, Ray Data, DeepSpeed, dan Accelerate
    • Mendukung eksekusi Llama-2 7B, 13B, dan 70B
    • TorchTrainer dari Ray Train mendistribusikan loop pelatihan ke banyak proses worker dan resource GPU
    • Sharding data ditangani oleh Ray Train, dan tiap worker mengakses pecahan data yang dialokasikan dengan session.get_dataset_shard("train") dan session.get_dataset_shard("valid")
  • Sharding model ditangani dengan DeepSpeed ZeRO stage 3 dan offloading optimizer state
    • Karena pecahan model tersebar ke beberapa worker, saat diperlukan akses ke model penuh seperti untuk menyimpan checkpoint, model harus di-unwarp dengan accelerator.unwrap_model(model)
  • Resource komputasi yang digunakan adalah sebagai berikut
    • 7B·13B: 16xA10G
    • 70B: 32xA10G, 4 instance g5.48xlarge
    • Dengan Ray, fine-tuning full-parameter tidak harus memakai A100
  • Pelatihan dijalankan hingga maksimum 10 epoch, dan checkpoint dengan perplexity terendah pada validation set dipilih

Mengunci struktur input·output dengan token khusus

  • Data fine-tuning merepresentasikan struktur tugas dengan token khusus, bukan prompt instruksi
    • Contoh: <START_Q>{question}<END_Q><START_A>{answer}<END_A>
  • Token khusus membantu model membedakan bagian input dan output, serta mempelajari dengan jelas kapan output harus dihentikan
    • Pada contoh, <END_A> didefinisikan sebagai stopping token agar output berhenti saat tugas selesai
  • Tokenizer Llama pada dasarnya menghasilkan 32.000 token ID
    • Jika empat token khusus ditambahkan, maka akan menghasilkan 32.004 ID
    • <START_Q> mendapat ID baru seperti 32000, <END_Q> seperti 32001, dan seterusnya
  • Skrip menambahkan token khusus dengan tokenizer.add_tokens(special_tokens, special_tokens=True) dan membuat parameter latih baru dengan model.resize_token_embeddings(len(tokenizer))

ViGGO: mengubah teks tidak terstruktur menjadi representasi fungsional

  • ViGGO awalnya adalah dataset berbahasa Inggris untuk mengubah representasi fungsional berbasis atribut-nilai menjadi teks alami, tetapi dalam eksperimen ini arahnya dibalik untuk mengubah teks tidak terstruktur menjadi representasi fungsional terstruktur
    • Domainnya adalah opini tentang video game
    • Representasi hasil dapat digunakan untuk pengindeksan dan aplikasi lanjutan
  • Model harus menghasilkan fungsi dan nilai atribut yang sesuai dengan kalimat
    • Kandidat fungsi mencakup inform, request, give_opinion, confirm, verify_attribute, suggest, request_explanation, recommend, dan request_attribute
    • Kandidat atribut mencakup name, release_year, esrb, genres, platforms, available_on_steam, has_linux_release, has_mac_release, specifier, rating, player_perspective, has_multiplayer, developer, exp_release_date, dan lain-lain
  • Untuk input contoh What's a really fast-paced game with multiplayer that you like to play?, output yang diharapkan adalah request(has_multiplayer[yes], specifier[fast-paced])
  • Model umum tidak mampu mengikuti format output yang diinginkan dengan baik, dan karena konteks input yang panjang, waktu pemrosesan input bisa lebih besar daripada waktu menghasilkan output
  • Tugas ini lebih berfokus pada pengenalan pola dan pemahaman bahasa dasar daripada penalaran logis yang kompleks
    • Ini adalah grounded task karena semua fakta yang diperlukan sudah ada di input
    • Fakta bahwa prompt few-shot membantu menjadi sinyal bahwa model Llama-2 kecil juga bisa membaik lewat fine-tuning

Evaluasi dan hasil ViGGO

  • Evaluasi tidak hanya memakai kecocokan string penuh
    • Dicek apakah fungsi output benar
    • Dicek apakah tipe atribut benar
    • Dicek apakah atribut dalam fungsi mengikuti urutan prioritas yang telah ditentukan
  • Untuk model instruction-following seperti GPT dan Llama-2-chat, aturan urutan atribut dicantumkan di prompt, sehingga evaluasi mengharuskan model mengikuti aturan itu
  • Untuk mempercepat evaluasi, digunakan batch inference API dari Ray bersama Aviary milik Anyscale
    • Generasi LLM dan post-processing dirangkai lalu didistribusikan ke banyak mesin
  • Setelah fine-tuning, akurasi model 7B dan 13B meningkat tajam
    • Akurasi GPT-4 turun besar bila evaluasi memasukkan prioritas atribut
    • Model yang di-fine-tune selalu mengikuti prioritas, sehingga penambahan kendala ini tidak mengubah akurasinya
  • Hasil ViGGO menunjukkan bahwa fine-tuning bisa menjadi cara yang stabil dan efisien untuk tugas yang memerlukan format terstruktur
    • Ini bukan sekadar mencocokkan regex atau format JSON, tetapi menentukan argumen apa yang harus disertakan dan menjaga urutan argumen tersebut
    • Karena hasil ini dicapai dengan model 7B·13B, biaya serving bisa lebih rendah dibanding memanggil endpoint GPT-4

Pembuatan SQL: membuat kueri dari bahasa alami dan konteks tabel

  • Tugas pembuatan SQL menerima kueri bahasa alami dan pernyataan SQL CREATE TABLE sebagai input, lalu menghasilkan kueri SQL yang dapat dieksekusi
  • Dataset yang digunakan, b-mc2/sql-create-context, adalah dataset Hugging Face yang menggabungkan WikiSQL dan Spider
    • Tiap data point terdiri dari kueri bahasa alami, pernyataan SQL CREATE TABLE, dan kueri SQL yang bersesuaian
    • Totalnya ada 78.577 data point
  • Ada masalah pada SQL jawaban di dataset
    • Di CREATE TABLE, atribut integer sering ditandai sebagai VARCHAR, tetapi di kueri SQL diperlakukan sebagai integer
    • Semua kueri SQL yang mengasumsikan atribut integer dihapus, sehingga ukuran dataset berkurang dari sekitar 70k menjadi 45k
  • Tugas ini juga cocok untuk fine-tuning karena mengubah bahasa alami menjadi representasi terstruktur berupa SQL
    • Berbeda dari ViGGO, beberapa SQL berbeda bisa sama-sama menghasilkan output yang benar, sehingga tugasnya lebih ambigu

Evaluasi dan hasil SQL

  • Evaluasi pembuatan SQL tidak cocok jika hanya membandingkan string sederhana
    • Perbandingan per karakter bisa menghasilkan banyak false negative
    • Perbandingan AST juga bisa sensitif terhadap hal seperti urutan nama variabel
    • Cara paling andal adalah mengeksekusi kode pada dataset sintetis dan membandingkan apakah outputnya sama
  • Dalam eksperimen, endpoint OpenAI GPT-3.5 digunakan untuk membuat tabel palsu untuk unit test pada ratusan contoh
    • GPT-3.5 melihat pertanyaan, skema tabel, dan jawaban benar lalu membuat tabel palsu berisi 10 data point
    • Dengan sqlglot.executor.execute, SQL jawaban benar dan SQL hasil model dieksekusi lalu hasilnya dibandingkan
  • Untuk memeriksa kualitas tabel data yang dibuat GPT-3.5, SQL jawaban benar dijalankan terlebih dahulu
    • Jika tabel hasil kosong atau panjangnya sama dengan tabel asli, contoh tersebut dibuang
    • Dalam proses ini, sekitar 50% tabel data buatan GPT terfilter
  • Llama-2 7B dan 13B yang di-fine-tune menghasilkan performa lebih tinggi daripada 70B-chat dan GPT-4
    • Kesalahan umum pada model Llama chat adalah tidak secara konsisten menaruh SQL di dalam tag <SQL> sesuai instruksi prompt
    • Masalah ini lebih sering terjadi pada model chat 7B·13B daripada 70B
  • Sebagian kueri bahasa alami di dataset SQL tidak menggunakan bahasa Inggris yang sempurna, dan noise semacam ini mungkin memengaruhi hasil GPT-4
    • Model yang di-fine-tune cepat beradaptasi dengan kebiasaan aneh dalam dataset

GSM8k: penalaran matematika yang lebih sulit daripada pembelajaran struktur

  • GSM8k adalah benchmark akademik standar untuk mengevaluasi kemampuan penalaran dan pemahaman matematika
  • Jika dua tugas sebelumnya terutama berfokus pada pembelajaran struktur, GSM8k menguji seberapa jauh model bisa meningkatkan proses penalaran untuk menyelesaikan soal matematika
  • Soal contohnya menanyakan total penjualan jika pada April terjual 48 unit dan pada Mei terjual setengahnya; jawaban berakhir dalam format #### 72 bersama perhitungan antara
  • LLM saat ini cenderung perlu menghasilkan proses berpikir sebagai bagian dari output agar generasi token berikutnya bisa didasarkan pada alur logis, alih-alih langsung menghitung jawaban akhir secara internal
  • Tugas ini membutuhkan bukan hanya perhitungan sederhana, tetapi juga chain of thought logis dari premis ke kesimpulan antara hingga jawaban akhir

Metode evaluasi GSM8k dan baseline

  • Evaluasi memerlukan cara yang stabil untuk mengekstrak jawaban akhir dari output model
  • Model bahasa umum mungkin tidak konsisten mengikuti format output yang diinginkan sehingga evaluasi otomatis sulit dilakukan
    • Untuk itu digunakan OpenAI function calling API
    • gpt-3.5-turbo-0613 diminta memanggil fungsi report_answer untuk mengekstrak jawaban bilangan bulat akhir dari hasil generasi model lain
    • Misalnya, meski model menjawab “The answer is four”, hasilnya tetap bisa di-parse menjadi 4
  • Metode ini telah diuji terhadap jawaban dataset untuk memastikan validitasnya, tetapi kekurangannya adalah menambah biaya token OpenAI dalam evaluasi
  • Model yang di-fine-tune cepat mempelajari pola jawaban target, sehingga bahkan saat salah pun struktur outputnya tetap bisa diprediksi
    • Evaluasi model yang di-fine-tune cukup ditangani dengan regex #### {answer} sehingga tidak perlu post-processing via endpoint OpenAI
  • Baseline yang digunakan adalah sebagai berikut
    • Hasil 8-shot prompting dari model base pre-trained yang dipublikasikan di paper
    • Berbagai template hasil prompt engineering untuk varian Llama-2 chat-tuned yang dilatih Meta dengan RLHF agar menjadi assistant serbaguna

Hasil GSM8k dan fine-tuning dua tahap

  • Fine-tuning model base secara konsisten meningkatkan performa GSM8k, tetapi tidak selalu menghasilkan hasil yang jauh lebih baik daripada model chat-tuned
    • Model chat kemungkinan sudah melihat contoh matematika selama proses chat-tuning, sehingga akurasinya lebih tinggi daripada model base
  • Cara memasukkan prompt ke model yang di-fine-tune juga tidak selalu memberi hasil lebih baik daripada model base
    • Misalnya, Llama-2-70B-chat bisa lebih rendah daripada model base yang diberi prompt contoh 8-shot
    • Namun model yang di-fine-tune secara konsisten lebih baik daripada model base dengan prompt 8-shot
  • Dari sisi biaya serving, model yang di-fine-tune bisa lebih menguntungkan
    • Pendekatan berbasis prompt menambah biaya token prompt pada setiap permintaan
    • Pada model yang di-fine-tune, biaya pada dasarnya hanya mencerminkan jumlah token pertanyaan
  • Data pelatihan GSM8k relatif kecil, sekitar 8k data, sehingga dianggap belum cukup untuk sepenuhnya mengeluarkan potensi Llama-13B
  • Pendekatan dua tahap yang lebih dulu melakukan fine-tuning Llama-13B base pada MathQA lalu kembali fine-tuning pada GSM8k memberikan peningkatan tambahan
    • Fine-tuning hanya dengan GSM8k memberi peningkatan 10 poin persentase dibanding base
    • Fine-tuning dua tahap dengan MathQA lalu GSM8k memberi tambahan 10 poin persentase lagi dari hasil fine-tuning awal, atau total 20 poin persentase di atas base
  • MathQA terdiri dari 30.000 pasangan tanya-jawab, tetapi lebih noisy dan strukturnya berbeda dari GSM8k
    • Kualitas jawabannya lebih rendah, dan jawaban akhir berbentuk multiple choice
    • Meski begitu, fine-tuning dua tahap tetap efektif memanfaatkan MathQA untuk meningkatkan hasil akhir GSM8k

Kriteria yang perlu dilihat saat penerapan di dunia nyata

  • Model tertutup seperti GPT-4 dan Claude-2 kuat untuk prototyping dan validasi nilai awal, tetapi tidak selalu cukup untuk mengoperasikan aplikasi LLM di produksi
  • Fine-tuning LLM untuk niche task bisa bernilai bukan hanya dari sisi privasi, tetapi juga dari sisi latensi, biaya, dan kualitas
    • Pada contoh ViGGO dan SQL, kualitasnya bahkan lebih baik daripada GPT-4
  • Dalam fine-tuning, fokus penting bukan detail implementasi infrastruktur, melainkan pengumpulan data dan pembangunan pipeline evaluasi
    • Pipeline evaluasi menjadi dasar untuk membandingkan trade-off berbagai solusi sesuai kebutuhan bisnis
  • Eksperimen dilakukan menggunakan platform fine-tuning dan serving Anyscale serta Anyscale Endpoints
  • Proses yang sama dapat diulang pada data dan cloud milik sendiri karena solusi fine-tuning dan serving Anyscale dibangun di atas Ray

1 komentar

 
GN⁺ 2023-08-13
Komentar Hacker News
  • Beberapa minggu lalu, dalam live stream coding, saya banyak membahas fine-tuning Llama 2 dengan dataset sendiri, dan melakukannya di satu GPU Colab.
    Dalam kasus saya, datasetnya adalah kode saya sendiri.
    Fine-tuning Llama stream: https://www.youtube.com/watch?v=TYgtG2Th6fI&t=2282s
    Ada juga beberapa sesi fine-tuning QLoRA lain, tempat saya menjelaskan konsep dari sudut pandang software engineer 8 tahun yang baru-baru ini beralih ke machine learning dan belajar secara otodidak.
    QloRa fine-tuning stream: https://www.youtube.com/watch?v=LitybCiLhSc&t=4584s
    Saya berusaha menjelaskan semudah mungkin bagaimana saya mendekatinya untuk proyek pribadi dan startup berbasis AI yang sedang saya kerjakan. Seri tentang fine-tuning LLM terkecil untuk web development juga tampaknya mendapat respons cukup baik; saya baru streaming sekitar sebulan dan berencana mengunggah lebih banyak lagi ke depannya.

    • Saya ingin tahu aturan praktis umum tentang kapan sebaiknya memakai RAG dan fine-tuning masing-masing.
      Saya juga belum begitu memahami cara membagi model yang sudah di-fine-tune. Apakah perlu LLM Terraform, LLM SQL, dan LLM Python secara terpisah, atau cukup satu LLM “kode” saja?
    • Benar-benar dibutuhkan aplikasi/modul/library sederhana setingkat “taruh materi sumber di direktori ini, tekan tombol, lalu chat dengan isinya”.
      Detail implementasinya terlalu banyak sehingga sulit diakses kecuali untuk kasus penggunaan yang benar-benar berarti. privateGPT sepertinya perlahan akan sampai ke titik itu.
    • Bagus, dan akan menarik kalau ada seri tentang menyiapkan dataset kustom untuk fine-tuning.
      Ini bagian yang sering dilewati banyak tutorial. Saya terutama penasaran bagaimana menyiapkannya untuk tujuan yang berbeda seperti keamanan dan akurasi.
    • Apakah bisa dilakukan dengan satu GPU? Saya penasaran apakah realistis bahkan dengan satu 3060.
  • Saya mengalami masalah yang sama dengan Llama 2. Hampir mustahil membuatnya hanya mengeluarkan teks yang diinginkan; selalu ada sesuatu yang ditambahkan sebelum atau sesudah respons.
    Saya penasaran apakah ada teknik prompting untuk memperbaiki masalah ini.

    • Lebih baik memakai model yang lebih baik.
      airoboros mendukung token PLAINFORMAT agar hanya mengeluarkan kode dan menghindari backtick, penjelasan, dan sebagainya.
      https://huggingface.co/TheBloke/airoboros-l2-70B-GPT4-2.0-GG...
    • Model Llama-2-chat di-fine-tune secara berlebihan seperti ini. Anda bisa mencoba few-shot prompting, tetapi itu tidak menjamin output yang diinginkan.
      Jika ingin menjaminnya, paling baik fine-tune dengan dataset kecil, kira-kira sekitar 1.000 contoh, lalu perbaiki dari sana.
    • Tergantung tujuannya, tetapi saya berhasil mereproduksi format output tertentu dengan melakukan fine-tuning pada model dasar LLaMA2, bukan model yang sudah di-RLHF.
      Kasus penggunaan saya adalah tugas sederhana untuk mengekstrak/menyintesis informasi dari teks, bukan penulisan kreatif. Model dasar mungkin tidak cocok untuk semua tugas.
    • Anda bisa memberi prompt agar model selalu mengeluarkan jawaban atau kode di dalam string content atau JSON.
      Kalau JSON, awal dan akhirnya bisa diidentifikasi, jadi konten di luar JSON bisa dihapus.
  • Senang melihat tulisan seperti ini muncul. Ada terlalu banyak diskusi tentang kustomisasi model di internet, dan artikel ini cukup berhasil menyingkirkan noise.
    Saya juga suka metodologi evaluasinya, dan tulisannya tampak bagus.

  • Aneh bahwa LoRA dan quantized training tidak dibahas lebih serius. Keduanya jauh lebih murah, memakan waktu lebih sedikit, dan ada banyak bukti bahwa hasilnya cukup bagus.
    Menurut saya ini bukan sesuatu yang layak disisihkan seperti opsi tambahan untuk dicoba nanti.

  • Senang melihat tugas mirip NER menghasilkan performa terbaik. Saya baru saja hendak melakukan pengujian serupa untuk membandingkannya dengan model BERT yang di-fine-tune.
    Saya penasaran berapa biaya training untuk tugas ini.

    • Saya salah satu co-author artikel ini. Data training ViGGO sekitar 5,1 ribu baris, dan kami melatih dengan ukuran blok 512.
      Ukuran blok bisa saja diturunkan, tetapi lebih mudah membiarkan kode apa adanya. 7B membutuhkan sekitar 15 menit per epoch pada 16xA10G, dan 13B sekitar 25 menit. Jadi biaya on-demand per epoch kira-kira $7,2 untuk 7B dan $12 untuk 13B. Angka ini hanya berdasarkan waktu yang dipakai untuk training dan tidak mencakup waktu start/stop cluster.
    • Pertanyaan bagus. Sayang mereka tidak menuliskan berapa lama 10 epoch berlangsung; kalau ada, biayanya bisa dihitung. Akan lebih baik lagi kalau mereka menyertakan waktu dan biaya sekaligus.
      Disebutkan bahwa 7B dan 13B memakai 16xA10G, sedangkan 70B memakai 32xA10G yang dibagi ke 4 instance g5.48xlarge. Dengan Ray, tidak perlu mendapatkan A100 untuk fine-tuning full-parameter model seperti ini, dan proses yang sama diulang untuk tiap tugas. Pada dataset GSM8k, mereka menunjukkan contoh run dengan panjang konteks 512 dan 3,7 juta token efektif per epoch.
      Mereka melatih hingga maksimal 10 epoch dan memilih checkpoint dengan perplexity minimum pada validation set.
  • Salah satu kesulitannya adalah untuk membuat dataset kustom yang cukup besar, Anda membutuhkan semacam pasukan kecil atau model lama yang sangat kuat.
    Pada akhirnya kemungkinan besar harus memakai OpenAI, tetapi membuat materi training untuk model lain dengan OpenAI melanggar ketentuan layanannya. Saya penasaran apakah ini pernah sampai menjadi gugatan. Apakah orang-orang menganggapnya tidak adil lalu mengabaikannya saja?

    • Tidak berlaku untuk semua tugas. Dalam banyak tugas natural language processing, Anda hanya perlu memformat ulang data yang sudah ada agar sesuai dengan format LLM.
    • Memangnya ada alasan untuk tidak mengabaikan ketentuan layanan? Skenario terburuknya hanya kehilangan akses.
  • Belakangan saya lebih sering melihat contoh NER, dan saya penasaran mengapa tidak memakai spaCy untuk tugas seperti itu.

    • spaCy tidak bekerja baik pada data training multibahasa, dan saya pernah melihatnya gagal dengan cara yang lebih banyak dan lebih aneh dibanding keluarga transformers.
    • Saya sedang mempertimbangkan pendekatan melabeli data dengan model mahal, lalu memakai metode teacher/student untuk melatih model yang lebih kecil seperti SpaCy atau BERT demi menekan biaya dan meningkatkan kecepatan.
    • Untuk NER saya memakai model keluarga BERT yang di-fine-tune, tetapi saya ingin melakukan perbandingan performa.
  • Saya bekerja di Anyscale.
    Blog ini tampaknya mendapat perhatian yang baik, jadi kami berencana memasukkannya ke Ray Summit: https://raysummit.anyscale.com/agenda
    Kalau ada ide jenis konten apa lagi yang ingin Anda lihat di Ray Summit, beri tahu kami.

  • Tertulis bahwa untuk 3,5 juta token, 7B butuh sekitar 14 menit untuk 1 epoch, sedangkan 13B sekitar 26 menit untuk 1 epoch.
    Katanya baik 7B maupun 13B membutuhkan minimal 1xg5.16xlarge sebagai head node dan 15xg5.4xlarge sebagai worker node; saya penasaran berapa biayanya di AWS.

  • Saya penasaran apakah Llama-2 bisa di-fine-tune secara lokal di M1 Ultra 64GB. Sebagian besar referensi memakai cloud atau Nvidia CUDA di Linux, jadi akan bagus kalau ada materi yang bisa dijadikan acuan.

    • Sepertinya tidak. Saya memakai M1 Max 64GB dan sebagian inference berjalan cukup baik.
      Untuk training, saya berencana membeli sedikit kredit RunPod, dan sepertinya bisa dilakukan dengan beberapa puluh dolar.