Repositori resmi Buku Pegangan Insinyur LLM oleh Paul Iusztin dan Maxime Labonne
Tujuan dari buku ini adalah untuk menciptakan sistem berbasis LLM end-to-end Anda sendiri menggunakan praktik terbaik:
Anda dapat mengunduh dan menggunakan model terakhir yang dilatih di Hugging Face.
Untuk menginstal dan menjalankan proyek secara lokal, Anda memerlukan dependensi berikut.
Alat | Versi | Tujuan | Tautan Instalasi |
---|---|---|---|
pienv | ≥2.3.36 | Beberapa versi Python (opsional) | Panduan Instalasi |
ular piton | 3.11 | Lingkungan waktu proses | Unduh |
Puisi | ≥1.8.3 | Manajemen paket | Panduan Instalasi |
Buruh pelabuhan | ≥27.1.1 | Kontainerisasi | Panduan Instalasi |
AWS CLI | ≥2.15.42 | Manajemen awan | Panduan Instalasi |
Git | ≥2.44.0 | Kontrol versi | Unduh |
Kode ini juga menggunakan dan bergantung pada layanan cloud berikut. Untuk saat ini, Anda tidak perlu melakukan apa pun. Kami akan memandu Anda di bagian instalasi dan penerapan tentang cara menggunakannya:
Melayani | Tujuan |
---|---|
Memeluk Wajah | Registri model |
Komet ML | Pelacak eksperimen |
Opik | Pemantauan segera |
ZenML | Lapisan orkestrator dan artefak |
AWS | Komputasi dan penyimpanan |
MongoDB | basis data NoSQL |
Qdrant | Basis data vektor |
Tindakan GitHub | Pipa CI/CD |
Dalam Buku Pegangan Insinyur LLM, Bab 2 akan memandu Anda melalui setiap alat. Bab 10 dan 11 memberikan panduan langkah demi langkah tentang cara mengatur semua yang Anda perlukan.
Berikut ini ikhtisar direktori:
.
├── code_snippets/ # Standalone example code
├── configs/ # Pipeline configuration files
├── llm_engineering/ # Core project package
│ ├── application/
│ ├── domain/
│ ├── infrastructure/
│ ├── model/
├── pipelines/ # ML pipeline definitions
├── steps/ # Pipeline components
├── tests/ # Test examples
├── tools/ # Utility scripts
│ ├── run.py
│ ├── ml_service.py
│ ├── rag.py
│ ├── data_warehouse.py
llm_engineering/
adalah paket Python utama yang mengimplementasikan fungsionalitas LLM dan RAG. Ini mengikuti prinsip Desain Berbasis Domain (DDD):
domain/
: Entitas dan struktur bisnis intiapplication/
: Logika bisnis, crawler, dan implementasi RAGmodel/
: pelatihan dan inferensi LLMinfrastructure/
: Integrasi layanan eksternal (AWS, Qdrant, MongoDB, FastAPI) Logika kode dan alur impor sebagai berikut: infrastructure
→ model
→ application
→ domain
pipelines/
: Berisi pipeline ML ZenML, yang berfungsi sebagai titik masuk untuk semua pipeline ML. Mengkoordinasikan tahapan pemrosesan data dan pelatihan model dalam siklus hidup ML.
steps/
: Berisi langkah-langkah ZenML individual, yang merupakan komponen yang dapat digunakan kembali untuk membangun dan menyesuaikan alur ZenML. Langkah-langkahnya melakukan tugas tertentu (misalnya, pemuatan data, prapemrosesan) dan dapat digabungkan dalam pipeline ML.
tests/
: Meliputi beberapa contoh pengujian yang digunakan sebagai contoh dalam pipeline CI.
tools/
: Skrip utilitas yang digunakan untuk memanggil pipeline ZenML dan kode inferensi:
run.py
: Skrip titik masuk untuk menjalankan pipeline ZenML.ml_service.py
: Memulai server inferensi REST API.rag.py
: Mendemonstrasikan penggunaan modul pengambilan RAG.data_warehouse.py
: Digunakan untuk mengekspor atau mengimpor data dari gudang data MongoDB melalui file JSON. configs/
: File konfigurasi ZenML YAML untuk mengontrol eksekusi pipeline dan langkah-langkahnya.
code_snippets/
: Contoh kode independen yang dapat dieksekusi secara independen.
Mulailah dengan mengkloning repositori dan menavigasi ke direktori proyek:
git clone https://github.com/PacktPublishing/LLM-Engineers-Handbook.git
cd LLM-Engineers-Handbook
Selanjutnya, kita harus menyiapkan lingkungan Python Anda dan dependensi yang berdekatan.
Proyek ini membutuhkan Python 3.11. Anda dapat menggunakan instalasi Python global atau menyiapkan versi khusus proyek menggunakan pyenv.
Verifikasi versi Python Anda:
python --version # Should show Python 3.11.x
pyenv --version # Should show pyenv 2.3.36 or later
pyenv install 3.11.8
python --version # Should show Python 3.11.8
python --version
# Output: Python 3.11.8
Catatan
Proyek ini menyertakan file .python-version
yang secara otomatis menyetel versi Python yang benar saat Anda berada di direktori proyek.
Proyek ini menggunakan Puisi untuk manajemen ketergantungan.
poetry --version # Should show Poetry version 1.8.3 or later
poetry env use 3.11
poetry install --without aws
poetry run pre-commit install
Ini akan:
Sebagai pengelola tugas kami, kami menjalankan semua skrip menggunakan Poe the Poet.
poetry shell
poetry poe ...
Jika Anda mengalami masalah dengan poethepoet
, Anda masih dapat menjalankan perintah proyek secara langsung melalui Poetry. Begini caranya:
pyproject.toml
poetry run
dengan perintah yang mendasarinya Alih-alih:
poetry poe local-infrastructure-up
Gunakan perintah langsung dari pyproject.toml:
poetry run < actual-command-from-pyproject-toml >
Catatan: Semua perintah proyek didefinisikan di bagian [tool.poe.tasks] di pyproject.toml
Sekarang, mari konfigurasikan proyek lokal kita dengan semua kredensial dan token yang diperlukan untuk menjalankan kode secara lokal.
Setelah Anda menginstal semua dependensi, Anda harus membuat dan mengisi file .env
dengan kredensial Anda untuk berinteraksi secara tepat dengan layanan lain dan menjalankan proyek. Menetapkan kredensial sensitif Anda dalam file .env
adalah praktik keamanan yang baik, karena file ini tidak akan dikomit ke GitHub atau dibagikan dengan orang lain.
cp .env.example .env # The file must be at your repository's root!
.env
untuk membantu Anda memulai. Berikut ini adalah setting wajib yang harus kita selesaikan ketika bekerja secara lokal: Untuk mengautentikasi ke API OpenAI, Anda harus mengisi env var OPENAI_API_KEY
dengan token autentikasi.
OPENAI_API_KEY = your_api_key_here
→ Lihat tutorial ini untuk mempelajari cara menyediakannya dari OpenAI.
Untuk mengautentikasi ke Hugging Face, Anda harus mengisi env HUGGINGFACE_ACCESS_TOKEN
dengan token autentikasi.
HUGGINGFACE_ACCESS_TOKEN = your_token_here
→ Lihat tutorial ini untuk mempelajari cara memberikannya dari Hugging Face.
Untuk mengautentikasi ke Comet ML (hanya diperlukan selama pelatihan) dan Opik, Anda harus mengisi COMET_API_KEY
env var dengan token autentikasi Anda.
COMET_API_KEY = your_api_key_here
→ Lihat tutorial ini untuk mempelajari cara mendapatkan variabel Comet ML dari atas. Anda juga dapat mengakses dashboard Opik menggunakan ?link ini.
Saat menerapkan proyek ke cloud, kita harus menetapkan pengaturan tambahan untuk Mongo, Qdrant, dan AWS. Jika Anda hanya bekerja secara lokal, nilai default dari env vars ini akan langsung berfungsi. Instruksi penerapan terperinci tersedia di Bab 11 Buku Pegangan Insinyur LLM.
Kita harus mengubah DATABASE_HOST
env var dengan URL yang mengarah ke cluster cloud MongoDB Anda.
DATABASE_HOST = your_mongodb_url
→ Lihat tutorial ini untuk mempelajari cara membuat dan menghosting cluster MongoDB secara gratis.
Ubah USE_QDRANT_CLOUD
menjadi true
, QDRANT_CLOUD_URL
dengan URL mengarah ke cluster cloud Qdrant Anda, dan QDRANT_APIKEY
dengan kunci API-nya.
USE_QDRANT_CLOUD = true
QDRANT_CLOUD_URL = your_qdrant_cloud_url
QDRANT_APIKEY = your_qdrant_api_key
→ Lihat tutorial ini untuk mempelajari cara membuat cluster Qdrant secara gratis
Agar pengaturan AWS Anda berfungsi dengan benar, Anda memerlukan AWS CLI yang diinstal pada mesin lokal Anda dan dikonfigurasi dengan benar dengan pengguna admin (atau pengguna dengan izin yang cukup untuk membuat sumber daya SageMaker, ECR, dan S3 baru; menggunakan pengguna admin akan membuat segalanya lebih mudah).
Bab 2 memberikan petunjuk langkah demi langkah tentang cara menginstal AWS CLI, membuat pengguna admin di AWS, dan mendapatkan kunci akses untuk menyiapkan variabel lingkungan AWS_ACCESS_KEY
dan AWS_SECRET_KEY
. Jika Anda sudah memiliki pengguna admin AWS, Anda harus mengonfigurasi env vars berikut di file .env
Anda:
AWS_REGION=eu-central-1 # Change it with your AWS region.
AWS_ACCESS_KEY=your_aws_access_key
AWS_SECRET_KEY=your_aws_secret_key
Kredensial AWS biasanya disimpan di ~/.aws/credentials
. Anda dapat melihat file ini secara langsung menggunakan cat
atau perintah serupa:
cat ~ /.aws/credentials
Penting
Opsi konfigurasi tambahan tersedia di settings.py. Variabel apa pun di kelas Settings
dapat dikonfigurasi melalui file .env
.
Saat menjalankan proyek secara lokal, kami menghosting database MongoDB dan Qdrant menggunakan Docker. Selain itu, server pengujian ZenML tersedia melalui paket Python mereka.
Peringatan
Anda perlu menginstal Docker (>= v27.1.1)
Untuk kemudahan penggunaan, Anda dapat memulai seluruh infrastruktur pengembangan lokal dengan perintah berikut:
poetry poe local-infrastructure-up
Selain itu, Anda dapat menghentikan server ZenML dan semua container Docker menggunakan perintah berikut:
poetry poe local-infrastructure-down
Peringatan
Saat berjalan di MacOS, sebelum memulai server, ekspor variabel lingkungan berikut: export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
Jika tidak, koneksi antara server lokal dan saluran pipa akan terputus. ? Detail lebih lanjut dalam edisi ini. Ini dilakukan secara default saat menggunakan Poe the Poet.
Mulai inferensi RESTful API secara real-time:
poetry poe run-inference-ml-service
Penting
Layanan mikro LLM, yang disebut oleh RESTful API, hanya akan berfungsi setelah menerapkan LLM ke AWS SageMaker.
URL Dasbor: localhost:8237
Kredensial bawaan:
username
: defaultpassword
:→ Cari tahu lebih lanjut tentang penggunaan dan pengaturan ZenML.
URL API REST: localhost:6333
URL Dasbor: localhost:6333/dashboard
→ Cari tahu lebih lanjut tentang menggunakan dan mengatur Qdrant dengan Docker.
URI Basis Data: mongodb://llm_engineering:[email protected]:27017
Nama database: twin
Kredensial bawaan:
username
: llm_engineeringpassword
: llm_engineering→ Cari tahu lebih lanjut tentang penggunaan dan pengaturan MongoDB dengan Docker.
Anda dapat mencari koleksi MongoDB Anda menggunakan plugin IDE MongoDB (yang harus Anda instal secara terpisah), di mana Anda harus menggunakan URI database untuk terhubung ke database MongoDB yang dihosting dalam kontainer Docker: mongodb://llm_engineering:[email protected]:27017
Penting
Segala sesuatu yang terkait dengan pelatihan atau menjalankan LLM (misalnya pelatihan, evaluasi, inferensi) hanya dapat dijalankan jika Anda menyiapkan AWS SageMaker, seperti yang dijelaskan di bagian berikutnya tentang infrastruktur cloud.
Di sini kami akan segera menyajikan cara menerapkan proyek ke AWS dan layanan tanpa server lainnya. Kami tidak akan membahas secara detail (karena semuanya disajikan dalam buku) tetapi hanya menunjukkan langkah-langkah utama yang harus Anda lalui.
Pertama, instal ulang dependensi Python Anda dengan grup AWS:
poetry install --with aws
Catatan
Bab 10 memberikan petunjuk langkah demi langkah di bagian "Menerapkan layanan mikro LLM menggunakan AWS SageMaker".
Pada titik ini, kami berharap Anda sudah menginstal AWS CLI dan AWS CLI serta var env proyek Anda (dalam file .env
) dikonfigurasi dengan benar dengan pengguna admin AWS.
Untuk memastikan praktik terbaik, kita harus membuat pengguna AWS baru yang dibatasi hanya untuk membuat dan menghapus sumber daya yang terkait dengan AWS SageMaker. Buat dengan menjalankan:
poetry poe create-sagemaker-role
Ini akan membuat file sagemaker_user_credentials.json
di root repositori Anda dengan nilai AWS_ACCESS_KEY
dan AWS_SECRET_KEY
baru Anda. Namun sebelum mengganti kredensial AWS baru Anda, jalankan juga perintah berikut untuk membuat peran eksekusi (untuk membuatnya menggunakan kredensial admin Anda).
Untuk membuat peran eksekusi IAM yang digunakan oleh AWS SageMaker untuk mengakses sumber daya AWS lainnya atas nama kami, jalankan perintah berikut:
poetry poe create-sagemaker-execution-role
Ini akan membuat file sagemaker_execution_role.json
di root repositori Anda dengan nilai AWS_ARN_ROLE
baru Anda. Tambahkan ke file .env
Anda.
Setelah Anda memperbarui nilai AWS_ACCESS_KEY
, AWS_SECRET_KEY
, dan AWS_ARN_ROLE
di file .env
, Anda dapat menggunakan AWS SageMaker. Perhatikan bahwa langkah ini penting untuk menyelesaikan penyiapan AWS.
Kami memulai alur pelatihan melalui ZenML dengan menjalankan perintah berikut:
poetry poe run-training-pipeline
Ini akan memulai kode pelatihan menggunakan konfigurasi dari configs/training.yaml
langsung di SageMaker. Anda dapat memvisualisasikan hasilnya di dashboard Comet ML.
Kami memulai jalur evaluasi melalui ZenML dengan menjalankan perintah berikut:
poetry poe run-evaluation-pipeline
Ini akan memulai kode evaluasi menggunakan konfigurasi dari configs/evaluating.yaml
langsung di SageMaker. Anda dapat memvisualisasikan hasilnya dalam kumpulan data *-results
yang disimpan ke profil Wajah Pelukan Anda.
Untuk membuat Titik Akhir Inferensi AWS SageMaker, jalankan:
poetry poe deploy-inference-endpoint
Untuk mengujinya, jalankan:
poetry poe test-sagemaker-endpoint
Untuk menghapusnya, jalankan:
poetry poe delete-inference-endpoint
Pipeline, artefak, dan kontainer ML di-deploy ke AWS dengan memanfaatkan fitur penerapan ZenML. Oleh karena itu, Anda harus membuat akun dengan ZenML Cloud dan mengikuti panduan mereka tentang penerapan tumpukan ZenML ke AWS. Jika tidak, kami memberikan petunjuk langkah demi langkah di Bab 11 , bagian Menyebarkan saluran pipa LLM Twin ke cloud tentang apa yang harus Anda lakukan.
Kami memanfaatkan opsi tanpa server Qdrant dan MongoDB saat menerapkan proyek. Oleh karena itu, Anda dapat mengikuti tutorial Qdrant dan MongoDB tentang cara membuat klaster freemium untuk masing-masingnya atau membaca Bab 11 , bagian Menyebarkan saluran pipa LLM Twin ke cloud dan ikuti petunjuk langkah demi langkah kami.
Kami menggunakan Tindakan GitHub untuk mengimplementasikan pipeline CI/CD kami. Untuk mengimplementasikan repositori Anda sendiri, Anda harus melakukan fork pada repositori kami dan menyetel env vars berikut sebagai rahasia Actions di repositori fork Anda:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_ECR_NAME
AWS_REGION
Selain itu, kami memberikan instruksi tentang cara mengatur semuanya di Bab 11 , bagian Menambahkan LLMOps ke LLM Twin .
Anda dapat memvisualisasikan hasilnya di dasbor yang dihosting sendiri jika Anda membuat akun Comet dan menyetel env var COMET_API_KEY
dengan benar. Karena Opik didukung oleh Comet, Anda tidak perlu menyiapkan apa pun di sepanjang Comet:
Semua pipeline ML akan diatur di belakang layar oleh ZenML. Ada beberapa pengecualian saat menjalankan skrip utilitas, seperti mengekspor atau mengimpor dari gudang data.
Pipeline ZenML adalah titik masuk untuk sebagian besar proses di seluruh proyek ini. Mereka berada di bawah folder pipelines/
. Jadi, saat Anda ingin memahami atau men-debug alur kerja, memulai dengan pipeline ZenML adalah pendekatan terbaik.
Untuk melihat alur yang berjalan dan hasilnya:
Pipelines
feature_engineering
)feature_engineering_run_2024_06_20_18_40_24
)Sekarang, mari jelajahi semua pipeline yang dapat Anda jalankan. Dari pengumpulan data hingga pelatihan, kami akan menyajikannya dalam urutan alaminya untuk menjalani proyek LLM secara end-to-end.
Jalankan pengumpulan data ETL:
poetry poe run-digital-data-etl
Peringatan
Anda harus menginstal Chrome (atau browser berbasis Chromium lainnya) di sistem Anda agar perayap LinkedIn dan Medium dapat berfungsi (yang menggunakan Selenium). Berdasarkan versi Chrome Anda, Chromedriver akan diinstal secara otomatis untuk mengaktifkan dukungan Selenium. Pilihan lainnya adalah menjalankan semuanya menggunakan image Docker kami jika Anda tidak ingin menginstal Chrome. Misalnya, untuk menjalankan semua gabungan alur, Anda dapat menjalankan poetry poe run-docker-end-to-end-data-pipeline
. Perhatikan bahwa perintah tersebut dapat diubah untuk mendukung pipeline lainnya.
Jika, karena alasan lain, Anda tidak menginstal browser berbasis Chromium dan tidak ingin menggunakan Docker, Anda memiliki dua opsi lain untuk mengatasi masalah Selenium ini:
chromedriver_autoinstaller.install()
dari application.crawlers.base dan panggilan statis lainnya yang memeriksa driver Chrome dan Selenium. Untuk menambahkan tautan tambahan untuk dikumpulkan, buka configs/digital_data_etl_[author_name].yaml
dan tambahkan ke bidang links
. Selain itu, Anda juga dapat membuat file yang benar-benar baru dan menentukannya pada saat dijalankan, seperti ini: python -m llm_engineering.interfaces.orchestrator.run --run-etl --etl-config-filename configs/digital_data_etl_[your_name].yaml
Jalankan alur rekayasa fitur:
poetry poe run-feature-engineering-pipeline
Hasilkan kumpulan data instruksi:
poetry poe run-generate-instruct-datasets-pipeline
Hasilkan kumpulan data preferensi:
poetry poe run-generate-preference-datasets-pipeline
Jalankan semua hal di atas yang dikompresi menjadi satu pipa:
poetry poe run-end-to-end-data-pipeline
Ekspor data dari gudang data ke file JSON:
poetry poe run-export-data-warehouse-to-json
Impor data ke gudang data dari file JSON (secara default, data diimpor dari direktori data/data_warehouse_raw_data
):
poetry poe run-import-data-warehouse-from-json
Ekspor artefak ZenML ke JSON:
poetry poe run-export-artifact-to-json-pipeline
Ini akan mengekspor artefak ZenML berikut ke folder output
sebagai file JSON (ini akan menggunakan versi terbarunya):
Anda dapat mengonfigurasi artefak apa yang akan diekspor dengan mengubah file konfigurasi configs/export_artifact_to_json.yaml
.
Jalankan alur pelatihan:
poetry poe run-training-pipeline
Jalankan alur evaluasi:
poetry poe run-evaluation-pipeline
Peringatan
Agar ini berfungsi, pastikan Anda mengonfigurasi AWS SageMaker dengan benar seperti yang dijelaskan dalam Menyiapkan infrastruktur cloud (untuk produksi).
Panggil modul pengambilan RAG dengan kueri pengujian:
poetry poe call-rag-retrieval-module
Mulai inferensi RESTful API secara real-time:
poetry poe run-inference-ml-service
Panggil RESTful API inferensi real-time dengan kueri pengujian:
poetry poe call-inference-ml-service
Ingatlah bahwa Anda dapat memantau jejak prompt di Opik.
Peringatan
Agar layanan inferensi berfungsi, Anda harus menerapkan layanan mikro LLM ke AWS SageMaker, seperti yang dijelaskan di bagian penyiapan infrastruktur cloud.
Periksa atau perbaiki masalah linting Anda:
poetry poe lint-check
poetry poe lint-fix
Periksa atau perbaiki masalah pemformatan Anda:
poetry poe format-check
poetry poe format-fix
Periksa kode untuk kredensial yang bocor:
poetry poe gitleaks-check
Jalankan semua tes menggunakan perintah berikut:
poetry poe test
Berdasarkan langkah-langkah penyiapan dan penggunaan yang dijelaskan di atas, dengan asumsi infrastruktur lokal dan cloud berfungsi dan .env
terisi sesuai yang diharapkan, ikuti langkah selanjutnya untuk menjalankan sistem LLM secara end-to-end:
Kumpulkan data: poetry poe run-digital-data-etl
Fitur komputasi: poetry poe run-feature-engineering-pipeline
Hitung kumpulan data instruksi: poetry poe run-generate-instruct-datasets-pipeline
Hitung kumpulan data penyelarasan preferensi: poetry poe run-generate-preference-datasets-pipeline
Penting
Mulai sekarang, agar langkah-langkah ini berfungsi, Anda perlu menyiapkan AWS SageMaker dengan benar, seperti menjalankan poetry install --with aws
dan mengisi variabel dan konfigurasi lingkungan terkait AWS.
SFT menyempurnakan Llamma 3.1: poetry poe run-training-pipeline
Untuk DPO, buka configs/training.yaml
, ubah finetuning_type
menjadi dpo
, dan jalankan poetry poe run-training-pipeline
lagi
Evaluasi model yang disempurnakan: poetry poe run-evaluation-pipeline
Penting
Mulai sekarang, agar langkah-langkah ini berfungsi, Anda perlu menyiapkan AWS SageMaker dengan benar, seperti menjalankan poetry install --with aws
dan mengisi variabel dan konfigurasi lingkungan terkait AWS.
Panggil hanya modul pengambilan RAG: poetry poe call-rag-retrieval-module
Terapkan layanan mikro LLM Twin ke SageMaker: poetry poe deploy-inference-endpoint
Uji layanan mikro LLM Twin: poetry poe test-sagemaker-endpoint
Mulai server RAG ujung ke ujung: poetry poe run-inference-ml-service
Uji server RAG: poetry poe call-inference-ml-service
Kursus ini adalah proyek sumber terbuka yang dirilis di bawah lisensi MIT. Jadi, selama Anda mendistribusikan LISENSI kami dan mengakui pekerjaan kami, Anda dapat dengan aman mengkloning atau membagi proyek ini dan menggunakannya sebagai sumber inspirasi untuk apa pun yang Anda inginkan (misalnya, proyek universitas, proyek gelar sarjana, proyek pribadi, dll.).