AWS: LLM HuggingFace RAG
Revision as of 06:48, 16 December 2024 by Onnowpurbo (talk | contribs) (Created page with "Berikut adalah panduan umum dan langkah-langkah yang dapat Anda ambil untuk membangun pipeline Retrieval Augmented Generation (RAG) sederhana menggunakan LLM dari Hugging Face...")
Berikut adalah panduan umum dan langkah-langkah yang dapat Anda ambil untuk membangun pipeline Retrieval Augmented Generation (RAG) sederhana menggunakan LLM dari Hugging Face di lingkungan AWS. Pendekatan ini tidak satu-satunya, namun dapat menjadi starting point yang solid.
Konsep Dasar RAG:
RAG umumnya melibatkan dua bagian utama:
- Retrieval (Pengambilan Informasi): Mengambil dokumen atau informasi relevan dari suatu knowledge base (misalnya kumpulan dokumen yang telah diindeks dan diembedding ke dalam vector store).
- Augmented Generation (Pengayaan Prompt): Menggabungkan hasil retrieval tersebut ke dalam prompt yang diberikan ke model bahasa (LLM), sehingga model dapat memberikan jawaban yang kontekstual dan lebih akurat.
Lingkungan AWS yang Bisa Digunakan:
- Amazon EC2 atau Amazon SageMaker: Untuk men-deploy model LLM Hugging Face.
- Amazon S3: Untuk menyimpan data dokumen asli, model checkpoint, maupun embedding hasil proses.
- Layanan untuk Vector Store:
- Amazon OpenSearch Service dengan plugin vector search: Anda dapat mengindeks embedding dokumen di sini.
- Alternatifnya, Anda bisa menggunakan basis data terkelola lain yang mendukung vector search, atau bahkan menyimpan embedding di database sendiri (misalnya DynamoDB) dan memprosesnya dengan FAISS secara manual di dalam container.
- Amazon Lambda / AWS API Gateway (opsional): Untuk menyiapkan endpoint yang memproses query user, melakukan retrieval, lalu memanggil model.
Langkah-Langkah Detail:
- Persiapan Model LLM di AWS:
- Anda dapat memulai dengan model open-source LLM dari Hugging Face Hub (misalnya Llama 2, Falcon, atau Dolly) yang telah tersedia di SageMaker JumpStart.
- Jika Anda ingin menggunakan model custom dari Hugging Face, Anda dapat:
- Unduh model dan simpan ke Amazon S3, lalu gunakan SageMaker untuk men-deploy container inference Hugging Face.
- SageMaker menyediakan `HuggingFaceModel` yang memudahkan proses ini:
from sagemaker.huggingface import HuggingFaceModel
huggingface_model = HuggingFaceModel(
model_data='s3://bucket-name/path/to/model.tar.gz',
role='arn:aws:iam::111122223333:role/SageMakerRole',
transformers_version='4.17',
pytorch_version='1.10',
py_version='py38'
)
predictor = huggingface_model.deploy(
initial_instance_count=1,
instance_type='ml.g4dn.xlarge'
)
- Pastikan Anda sudah menyesuaikan tipe instance dengan kebutuhan GPU/CPU.
- Membangun Vector Embedding untuk Dokumen:
- Ambil kumpulan dokumen (misalnya teks, PDF yang sudah diekstrak isinya, dsb.) dan simpan di Amazon S3.
- Gunakan model embedding (misalnya `sentence-transformers` atau `Instructor Embeddings`) untuk mengubah teks menjadi embedding vektor. Anda dapat melakukan ini secara offline di EC2 atau job SageMaker Processing:
from sentence_transformers import SentenceTransformer
model = SentenceTransformer('sentence-transformers/all-mpnet-base-v2')
documents = ["Teks dokumen 1", "Teks dokumen 2", "Teks dokumen N"]
embeddings = model.encode(documents)
- Simpan hasil embedding ke S3 atau langsung indeks ke Amazon OpenSearch.
3. Membuat Index Vector Store di Amazon OpenSearch:
- Buat domain Amazon OpenSearch dengan fitur vector search diaktifkan. - Buat index untuk dokumen:
h
PUT my-index
{
"mappings": {
"properties": {
"text": {"type": "text"},
"embedding": {"type": "knn_vector", "dimension": 768}
}
}
}
(Dimension menyesuaikan dengan model embedding yang digunakan.) - Indeks dokumen beserta embedding-nya ke OpenSearch.
POST my-index/_doc
{
"text": "Teks dokumen 1",
"embedding": [0.123, 0.234, ...] // embedding vektor hasil encode
}
```
4. Alur Query (RAG):
- User mengirim pertanyaan (query). - Sistem mengambil pertanyaan user, me-generate embedding query dengan model embedding yang sama. - Lakukan pencarian di OpenSearch dengan `knn` search:
POST my-index/_search
{
"size": 3,
"query": {
"knn": {
"embedding": {
"vector": [0.321, 0.456, ...], // embedding query
"k": 3
}
}
}
}
```
- Dapatkan dokumen teratas yang paling relevan.
- Buat prompt baru untuk LLM dengan format:
Context:
[Dokumen 1]
[Dokumen 2]
[Dokumen 3]
Pertanyaan: {pertanyaan user}
Jawaban:
- Kirim prompt tersebut ke endpoint model Hugging Face di SageMaker:
response = predictor.predict({"inputs": prompt})
print(response)
5. Orkestrasi Alur:
- Untuk menyederhanakan pipeline, Anda bisa membungkus semua alur (embedding query, searching di OpenSearch, membangun prompt, memanggil LLM) dalam satu Lambda function.
- Gunakan AWS API Gateway untuk menyediakan endpoint publik.
Alurnya menjadi:
1. User mengirim query ke endpoint API Gateway.
2. API Gateway memanggil Lambda.
3. Lambda:
- Menghitung embedding query.
- Melakukan knn search ke OpenSearch.
- Menggabungkan hasil dan membentuk prompt.
- Memanggil endpoint SageMaker untuk inference LLM.
- Mengembalikan jawaban ke user.
Tips:
- Optimasi Biaya & Performa: Pertimbangkan untuk menggunakan instance GPU yang sesuai ukuran beban. Untuk beban rendah, Anda dapat memanfaatkan endpoint serverless di SageMaker (jika tersedia untuk model Hugging Face tertentu) atau scaling policy auto-scaling.
- Keamanan & IAM: Pastikan peran IAM (misalnya peran SageMaker, peran Lambda) memiliki hak akses untuk membaca S3, query OpenSearch, dan memanggil endpoint inference.
- Penyesuaian Prompt: Kualitas jawaban sangat tergantung dari cara Anda menyusun prompt dengan konteks hasil retrieval. Eksperimen dengan panjang konteks, jumlah dokumen, serta format prompt.
- Monitoring & Logging: Gunakan CloudWatch untuk memonitor kinerja inference endpoint, Lambda, dan OpenSearch queries. Log detail query & response untuk memudahkan debugging.
Dengan langkah-langkah di atas, Anda akan memiliki pipeline RAG sederhana: dokumen disimpan, diencode menjadi embedding, diindeks, dan pada saat query masuk, sistem akan melakukan retrieval sebelum mengumpankan konteks ke LLM yang dijalankan di AWS.