Memanfaatkan API untuk Integrasi LLM
Mengintegrasikan Large Language Models (LLM) ke dalam basis kode dapat dicapai melalui berbagai metode, tetapi penggunaan API yang kompatibel dengan OpenAI sangat direkomendasikan untuk penerapan produksi. Pendekatan ini memberikan fleksibilitas untuk beradaptasi dengan lanskap model yang berkembang pesat. Model yang dianggap mutakhir beberapa bulan lalu dapat dengan cepat menjadi usang.
Sejak booming AI yang dimulai dengan ChatGPT pada tahun 2022, antarmuka API OpenAI telah muncul sebagai standar de facto untuk menghubungkan aplikasi ke LLM. Standar ini memungkinkan pengembang untuk membangun aplikasi menggunakan sumber daya yang tersedia, seperti memulai dengan Mistral 7B di Llama.cpp pada notebook dan beralih dengan mulus ke server API Mistral AI untuk penerapan produksi. Ini menghilangkan penguncian ke satu model, mesin inferensi, atau penyedia API.
Layanan inferensi berbasis cloud menyediakan cara yang ramah belanja modal (capex) untuk meningkatkan skala penerapan AI. Layanan ini menghilangkan kebutuhan akan manajemen perangkat keras dan konfigurasi model, sebagai gantinya menyediakan API untuk integrasi aplikasi.
Selain penawaran API dari pembangun model utama, sejumlah startup infrastruktur AI yang berkembang menawarkan inferensi sebagai layanan untuk model open-weight. Penyedia ini bervariasi dalam pendekatan mereka. Beberapa, seperti SambaNova, Cerebras, dan Groq, memanfaatkan perangkat keras khusus atau teknik seperti speculative decoding untuk mempercepat inferensi tetapi menawarkan pilihan model yang lebih kecil. Yang lain, seperti Fireworks AI, mendukung penyebaran model fine-tune kustom menggunakan adaptor Low Rank Adaptation (LoRA). Keanekaragaman ekosistem AI memerlukan penelitian menyeluruh sebelum berkomitmen pada penyedia tertentu.
Pertimbangan Penerapan LLM On-Premise
Dalam situasi di mana pendekatan berbasis cloud tidak layak karena privasi, peraturan, atau kendala infrastruktur yang sudah ada (misalnya, sebuah perusahaan telah berinvestasi dalam server GPU), penerapan on-premise menjadi penting. Ini dapat menghadirkan beberapa tantangan. Beberapa pertanyaan umum yang muncul meliputi:
- Pemilihan Model: Model yang sesuai tergantung pada kasus penggunaan tertentu. Model yang dirancang untuk chatbot layanan pelanggan akan memiliki persyaratan yang berbeda daripada yang digunakan untuk retrieval-augmented generation atau sebagai asisten kode. Menghabiskan waktu dengan penyedia API untuk mengidentifikasi model yang memenuhi kebutuhan direkomendasikan.
- Persyaratan Perangkat Keras: Menentukan perangkat keras yang diperlukan sangat penting, karena GPU mahal dan sulit didapatkan. Model itu sendiri dapat memberikan wawasan tentang perangkat keras yang diperlukan untuk menjalankannya. Model yang lebih besar membutuhkan lebih banyak perangkat keras. Perkiraan kasar memori GPU minimum dapat dihitung dengan mengalikan jumlah parameter (dalam miliaran) dengan 2GB untuk model yang dilatih pada presisi 16-bit. Untuk model 8-bit, 1GB per miliar parameter diperlukan. Teknik kompresi model seperti quantization dapat mengurangi ini menjadi 512MB per miliar parameter. Ini adalah batas bawah. Memori tambahan diperlukan untuk melayani model ke banyak pengguna secara bersamaan karena cache key-value, yang bertindak sebagai memori jangka pendek model. Matriks dukungan Nvidia menawarkan panduan tentang GPU yang diperlukan untuk menjalankan berbagai model.
- Redundansi: Selain ukuran perangkat keras ke model, redundansi harus dipertimbangkan. Node GPU tunggal rentan terhadap kegagalan, jadi menyebarkan dua atau lebih sistem untuk failover dan load balancing adalah penting.
- Metode Penerapan: LLM dapat diterapkan dan dilayani dalam produksi menggunakan berbagai metode: bare metal dengan load balancer, mesin virtual, atau container di Docker atau Kubernetes. Kubernetes menyederhanakan penerapan skala besar dengan mengotomatiskan pembuatan container, jaringan, dan load balancing.
Kubernetes untuk Penerapan LLM
Kubernetes mengabstraksi sebagian besar kompleksitas yang terkait dengan penerapan skala besar dengan mengotomatiskan pembuatan container, jaringan, dan load balancing. Banyak perusahaan telah mengadopsi dan memahami Kubernetes. Nvidia, Hugging Face, dan lainnya menyukai lingkungan container dengan Nvidia Inference Microservices (NIMs) dan Hugging Face Generative AI Services (HUGS), yang telah dikonfigurasi sebelumnya untuk beban kerja dan penerapan umum.
Mesin Inferensi
Berbagai mesin inferensi tersedia untuk menjalankan model, termasuk Ollama dan Llama.cpp, yang kompatibel dengan berbagai perangkat keras. Untuk menskalakan model, library seperti vLLM, TensorRT LLM, SGLang, dan PyTorch sering digunakan. Panduan ini berfokus pada penyebaran model menggunakan vLLM, karena mendukung berbagai pilihan model populer dan menawarkan dukungan dan kompatibilitas luas di seluruh Nvidia, AMD, dan perangkat keras lainnya.
Mempersiapkan Lingkungan Kubernetes
Menyiapkan lingkungan Kubernetes untuk bekerja dengan GPU memerlukan driver dan dependensi tambahan dibandingkan dengan pengaturan Kubernetes tipikal. Proses penyiapan akan berbeda untuk perangkat keras AMD dan Nvidia.
Panduan ini menggunakan K3S dalam konfigurasi node tunggal. Langkah-langkah dasar mirip dengan lingkungan multi-node, tetapi dependensi harus dipenuhi pada setiap node pekerja GPU, dan konfigurasi penyimpanan mungkin memerlukan penyesuaian.
Tujuannya adalah untuk memberikan fondasi yang kuat untuk menyebarkan beban kerja inferensi dengan cara yang ramah produksi. Prasyarat berikut diperlukan:
- Server atau workstation dengan setidaknya satu board GPU AMD atau Nvidia yang didukung
- Instalasi baru Ubuntu 24.04 LTS
Dependensi Nvidia
Menyiapkan lingkungan K3S yang dipercepat Nvidia memerlukan instalasi CUDA Drivers Fabric Manager dan Headless server drivers. Instal utilitas server Nvidia untuk debugging masalah driver.
Penjelasan Lebih Rinci
Mari kita bahas lebih dalam setiap aspek ini:
Pemilihan Model: Proses pemilihan model adalah langkah penting. Ini bukan hanya tentang memilih model yang paling populer atau yang memiliki skor benchmark tertinggi. Lebih penting untuk mempertimbangkan persyaratan spesifik dari kasus penggunaan Anda. Misalnya, jika Anda membangun chatbot untuk layanan pelanggan, Anda akan membutuhkan model yang sangat baik dalam pemahaman bahasa alami, menghasilkan respons yang relevan dan koheren, dan menangani berbagai input pengguna. Sebaliknya, jika Anda menggunakan LLM untuk membuat kode, Anda akan membutuhkan model yang dilatih secara ekstensif pada data kode dan mampu menghasilkan kode yang akurat dan efisien dalam berbagai bahasa pemrograman. Selain itu, Anda perlu mempertimbangkan faktor-faktor seperti ukuran model (model yang lebih besar membutuhkan lebih banyak sumber daya komputasi), latensi (seberapa cepat model dapat menghasilkan respons), dan biaya (model yang berbeda memiliki harga yang berbeda). Cara yang baik untuk memulai adalah dengan membuat daftar fitur dan persyaratan penting Anda, lalu membandingkan model yang berbeda berdasarkan kriteria tersebut. Anda juga dapat bereksperimen dengan berbagai model menggunakan API atau platform uji coba untuk melihat bagaimana mereka berkinerja dalam kasus penggunaan khusus Anda.
Persyaratan Perangkat Keras: Setelah Anda memilih model, Anda perlu menentukan perangkat keras yang diperlukan untuk menjalankannya secara efisien. Seperti yang disebutkan sebelumnya, GPU memainkan peran penting dalam penerapan LLM karena mereka menyediakan kekuatan komputasi yang dibutuhkan untuk menjalankan perhitungan yang kompleks dengan cepat. Jumlah memori GPU yang Anda butuhkan akan tergantung pada ukuran model dan jumlah pengguna bersamaan yang ingin Anda layani. Sebagai aturan umum, model yang lebih besar membutuhkan lebih banyak memori GPU. Selain memori GPU, Anda juga perlu mempertimbangkan persyaratan CPU, RAM, dan penyimpanan. CPU menangani tugas-tugas seperti pemrosesan awal dan pasca-pemrosesan data, sementara RAM menyediakan memori untuk menjalankan model dan data. Penyimpanan digunakan untuk menyimpan model, data, dan log. Untuk memperkirakan persyaratan perangkat keras Anda, Anda dapat menggunakan alat dan kalkulator yang disediakan oleh vendor model dan penyedia layanan cloud. Anda juga dapat memulai dengan konfigurasi yang lebih kecil dan kemudian menskalakan jika perlu. Penting untuk memantau penggunaan sumber daya Anda secara teratur dan menyesuaikan konfigurasi Anda sesuai kebutuhan.
Redundansi: Redundansi sangat penting untuk memastikan ketersediaan dan keandalan penerapan LLM Anda. Jika Anda hanya memiliki satu node GPU, penerapan Anda akan menjadi single point of failure. Jika node tersebut gagal, layanan Anda akan offline. Untuk menghindari hal ini, Anda harus menyebarkan dua atau lebih node GPU dan mengkonfigurasinya untuk failover dan load balancing. Failover memastikan bahwa jika satu node gagal, node lain akan secara otomatis mengambil alih. Load balancing mendistribusikan lalu lintas di beberapa node, yang membantu mencegah satu node menjadi kelebihan beban. Ada banyak cara untuk menerapkan failover dan load balancing, seperti menggunakan load balancer perangkat keras, load balancer perangkat lunak, atau penyedia layanan cloud. Penting untuk memilih solusi yang sesuai dengan kebutuhan dan anggaran Anda.
Metode Penerapan: Ada beberapa cara untuk menyebarkan LLM dalam produksi, masing-masing dengan kelebihan dan kekurangannya sendiri. Bare metal adalah opsi yang paling fleksibel dan memberikan kontrol paling besar atas perangkat keras dan perangkat lunak. Namun, juga yang paling kompleks dan membutuhkan lebih banyak keahlian teknis. Mesin virtual (VM) memberikan isolasi dan fleksibilitas yang lebih besar daripada bare metal, tetapi dapat memiliki overhead kinerja. Container (misalnya, Docker) adalah cara yang ringan dan portabel untuk mengemas dan menyebarkan aplikasi. Mereka memberikan isolasi dan konsistensi yang baik, dan mereka dapat dengan mudah diskalakan menggunakan orkestrasi container seperti Kubernetes. Kubernetes adalah sistem orkestrasi container yang populer yang mengotomatiskan penyebaran, penskalaan, dan manajemen aplikasi container. Kubernetes sangat cocok untuk penerapan LLM skala besar karena menyederhanakan kompleksitas manajemen banyak container dan menyediakan fitur seperti load balancing, failover, dan pembaruan rolling.
Inference Engines: Pilihan mesin inferensi juga penting untuk kinerja dan efisiensi penerapan LLM Anda. Mesin inferensi bertanggung jawab untuk menjalankan model dan menghasilkan respons. Ada banyak mesin inferensi yang berbeda yang tersedia, masing-masing dengan kelebihan dan kekurangannya sendiri. Beberapa mesin inferensi yang populer termasuk TensorFlow Serving, PyTorch Serve, TensorRT, dan vLLM. TensorFlow Serving dan PyTorch Serve adalah mesin inferensi serbaguna yang mendukung berbagai model dan perangkat keras. TensorRT adalah mesin inferensi yang dioptimalkan untuk GPU Nvidia dan dapat memberikan peningkatan kinerja yang signifikan. vLLM adalah mesin inferensi yang dirancang khusus untuk LLM dan menawarkan fitur-fitur seperti penskalaan otomatis, penjadwalan batch, dan kompresi model. Pilihan mesin inferensi akan tergantung pada kebutuhan khusus Anda, seperti jenis model yang Anda gunakan, perangkat keras yang Anda miliki, dan persyaratan kinerja Anda.
Mempersiapkan Lingkungan Kubernetes: Menyiapkan lingkungan Kubernetes untuk bekerja dengan GPU membutuhkan beberapa langkah tambahan. Pertama, Anda perlu menginstal driver dan dependensi yang diperlukan untuk GPU Anda. Untuk GPU Nvidia, Anda perlu menginstal CUDA Drivers dan Nvidia Container Toolkit. Nvidia Container Toolkit memungkinkan container untuk mengakses GPU di host. Untuk GPU AMD, Anda perlu menginstal driver AMD ROCm. Selanjutnya, Anda perlu mengkonfigurasi Kubernetes untuk mendeteksi dan menggunakan GPU. Ini dapat dilakukan dengan menginstal pengelola perangkat GPU seperti Nvidia Device Plugin atau AMD Device Plugin. Pengelola perangkat GPU memungkinkan Kubernetes untuk mengalokasikan GPU ke container. Terakhir, Anda perlu membuat definisi deployment yang menentukan sumber daya yang dibutuhkan oleh container LLM Anda, termasuk jumlah GPU yang dibutuhkan.
Dengan mengikuti langkah-langkah ini, Anda dapat menyiapkan lingkungan Kubernetes untuk menyebarkan dan menskalakan LLM Anda secara efisien dan andal. Penting untuk terus memantau kinerja penerapan Anda dan membuat penyesuaian sesuai kebutuhan untuk memastikan bahwa Anda memaksimalkan penggunaan sumber daya Anda dan memberikan pengalaman terbaik bagi pengguna Anda.
Contoh Konfigurasi K3S
Berikut adalah contoh konfigurasi K3S untuk menyebarkan LLM dengan GPU Nvidia:
- Instalasi K3S: