Membangun API LLM Berkinerja Tinggi dan Siap Produksi dengan FastAPI: Panduan Langkah demi Langkah
Membangun API LLM Berkinerja Tinggi dan Siap Produksi dengan FastAPI: Panduan Langkah demi Langkah
FastAPI, sebagai framework Web Python modern dan berkinerja tinggi, sangat populer karena kemudahan penggunaan, kecepatan, dan dokumentasi API yang dihasilkan secara otomatis. Terutama dalam membangun API backend untuk aplikasi LLM (Large Language Model), FastAPI menunjukkan keunggulan yang kuat. Artikel ini akan mengajarkan Anda langkah demi langkah cara menggunakan FastAPI untuk membangun API LLM yang siap produksi, dan membahas beberapa praktik terbaik.
Mengapa Memilih FastAPI?
Saat membangun API aplikasi LLM, FastAPI menawarkan keuntungan utama berikut:
- Performa Tinggi: Berdasarkan ASGI, FastAPI dapat menangani permintaan konkurensi tinggi, yang sangat penting untuk aplikasi LLM yang membutuhkan respons cepat.
- Dukungan Asinkron: FastAPI memiliki dukungan bawaan untuk kata kunci
asyncdanawait, yang memudahkan penanganan operasi asinkron, seperti memanggil inferensi LLM, menghindari pemblokiran thread utama. - Dokumentasi API Otomatis: FastAPI menggunakan OpenAPI dan JSON Schema untuk menghasilkan dokumentasi API interaktif (Swagger UI) secara otomatis, memudahkan pengembang untuk menguji dan menggunakan API Anda.
- Validasi Data: FastAPI menggunakan Pydantic untuk validasi data, memastikan kebenaran parameter permintaan, dan mengurangi kesalahan.
- Injeksi Dependensi: Sistem injeksi dependensi FastAPI memudahkan untuk mengelola dan berbagi sumber daya, seperti model LLM.
- Komunitas Aktif: FastAPI memiliki komunitas yang besar dan aktif, yang dapat memperoleh sumber daya dan dukungan yang kaya.
Persiapan
-
Instal Python: Pastikan Anda telah menginstal Python 3.7 atau lebih tinggi.
-
Instal FastAPI dan Uvicorn: Gunakan pip untuk menginstal FastAPI dan Uvicorn (server ASGI):
pip install fastapi uvicorn -
Pilih Model LLM: Pilih model LLM yang ingin Anda gunakan. Bisa berupa model OpenAI, atau model open source, seperti TinyLlama. Jika Anda memilih OpenAI, Anda perlu mendapatkan kunci API OpenAI. Jika Anda memilih TinyLlama, Anda perlu mengunduh file model.
Langkah 1: Membuat Aplikasi FastAPI
Buat file bernama main.py, dan tambahkan kode berikut:
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
app = FastAPI(title="LLM API", description="A simple API for interacting with LLMs.")
class InputText(BaseModel):
text: str
class OutputText(BaseModel):
generated_text: str
Kode ini mendefinisikan aplikasi FastAPI, dan mendefinisikan dua model Pydantic: InputText untuk menerima teks input, OutputText untuk mengembalikan teks yang dihasilkan.
Langkah 2: Menambahkan Logika Inferensi LLM
Bergantung pada model LLM yang Anda pilih, tambahkan logika inferensi yang sesuai. Di sini, contohnya menggunakan OpenAI API:
import openai
import os
# Dapatkan kunci API OpenAI
openai.api_key = os.environ.get("OPENAI_API_KEY") # Disarankan menggunakan variabel lingkungan
@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
"""
Generates text based on the input text using OpenAI.
"""
try:
response = openai.Completion.create(
engine="text-davinci-003", # Pilih model
prompt=input_text.text,
max_tokens=150,
n=1,
stop=None,
temperature=0.7,
)
generated_text = response.choices[0].text.strip()
return OutputText(generated_text=generated_text)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
Kode ini mendefinisikan rute /generate yang menerima objek InputText sebagai masukan, memanggil OpenAI API untuk menghasilkan teks, dan mengembalikan teks yang dihasilkan sebagai objek OutputText. Perhatikan untuk mengganti text-davinci-003 dengan model yang sesuai pilihan Anda.
Jika menggunakan model lokal seperti TinyLlama, Anda perlu menginstal pustaka yang sesuai, seperti transformers, dan memuat model ke dalam memori. Contoh kode berikut:
from transformers import pipeline
import torch
generator = pipeline('text-generation', model="TinyLlama/TinyLlama-1.1B-Chat-v1.0", torch_dtype=torch.bfloat16, device_map="auto")
@app.post("/generate", response_model=OutputText)
async def generate_text(input_text: InputText):
"""
Generates text based on the input text using TinyLlama.
"""
try:
generated_text = generator(input_text.text, max_length=50, do_sample=True, temperature=0.7)[0]['generated_text']
return OutputText(generated_text=generated_text)
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
Langkah 3: Menjalankan Aplikasi FastAPI
Jalankan aplikasi FastAPI menggunakan Uvicorn:
uvicorn main:app --reload
```Ini akan memulai server lokal, Anda dapat mengakses `http://127.0.0.1:8000/docs` di browser Anda untuk melihat dokumentasi API yang dibuat secara otomatis. Parameter `--reload` dapat secara otomatis memulai ulang server setelah kode dimodifikasi, yang nyaman untuk pengembangan.
## Langkah 4: Menguji API
Uji API Anda menggunakan dokumentasi API atau alat seperti curl. Misalnya, gunakan curl untuk mengirim permintaan POST:
```bash
curl -X POST -H "Content-Type: application/json" -d '{"text": "Tell me a joke about cats."}' http://127.0.0.1:8000/generate
Anda akan menerima respons JSON yang berisi teks yang dihasilkan.
Langkah 5: Penerapan Produksi
Terapkan aplikasi FastAPI Anda ke lingkungan produksi, misalnya:
- Docker: Gunakan Docker untuk membuat container aplikasi Anda, sehingga memudahkan penerapan dan pengelolaan.
- Platform Cloud: Terapkan ke platform cloud, seperti AWS, Google Cloud Platform, atau Azure. Azure Cosmos DB dan Azure Functions yang disebutkan dalam artikel dapat digunakan untuk membangun API tanpa server (serverless API). Modal juga dapat digunakan untuk menerapkan aplikasi FastAPI yang dapat diskalakan secara otomatis.
- Server: Terapkan ke server Anda sendiri.
Praktik Terbaik
- Gunakan Variabel Lingkungan untuk Menyimpan Informasi Sensitif: Jangan hardcode informasi sensitif seperti kunci API dalam kode Anda, tetapi gunakan variabel lingkungan.
- Tambahkan Pencatatan Log: Gunakan modul pencatatan log untuk mencatat status operasi API, yang nyaman untuk debugging dan pemantauan.
- Tambahkan Penanganan Kesalahan: Gunakan blok
try...exceptuntuk menangani pengecualian yang mungkin terjadi dan mengembalikan informasi kesalahan yang sesuai. - Pembatasan Laju (Rate Limiting): Gunakan pembatas laju untuk mencegah API disalahgunakan. FastAPI memiliki beberapa pustaka pembatasan laju yang tersedia.
- Caching: Untuk permintaan yang berulang, Anda dapat menggunakan caching untuk meningkatkan kinerja.
- Pemantauan: Gunakan alat pemantauan untuk memantau kinerja dan ketersediaan API.
Teknik Tingkat Lanjut
- Pemrosesan Asinkron: Untuk inferensi LLM yang memakan waktu, gunakan kata kunci
asyncdanawaituntuk pemrosesan asinkron untuk menghindari pemblokiran thread utama. - Respons Streaming: Menggunakan respons streaming (StreamingResponse) dapat mengembalikan teks yang dihasilkan secara real-time, meningkatkan pengalaman pengguna.
- Multi-threading/Multi-processing: Untuk inferensi LLM yang intensif CPU, Anda dapat menggunakan multi-threading atau multi-processing untuk meningkatkan kinerja.
- Akselerasi GPU: Jika model LLM Anda mendukung akselerasi GPU, Anda dapat menggunakan CUDA atau pustaka akselerasi GPU lainnya untuk meningkatkan kecepatan inferensi.





