Paul Iusztin 和 Maxime Labonne 撰寫的 LLM 工程師手冊的官方儲存庫
本書的目標是使用最佳實踐來創建您自己的基於 LLM 的端到端系統:
您可以在 Hugging Face 上下載並使用最終訓練的模型。
要在本機安裝並執行項目,您需要以下相依性。
工具 | 版本 | 目的 | 安裝連結 |
---|---|---|---|
pyenv | ≥2.3.36 | 多個Python版本(可選) | 安裝指南 |
Python | 3.11 | 運行時環境 | 下載 |
詩 | ≥1.8.3 | 套件管理 | 安裝指南 |
碼頭工人 | ≥27.1.1 | 貨櫃化 | 安裝指南 |
AWS CLI | ≥2.15.42 | 雲端管理 | 安裝指南 |
git | ≥2.44.0 | 版本控制 | 下載 |
該程式碼還使用並依賴以下雲端服務。目前,您無需執行任何操作。我們將在安裝和部署部分指導您如何使用它們:
服務 | 目的 |
---|---|
抱臉 | 模型註冊表 |
彗星ML | 實驗追蹤器 |
奧皮克 | 及時監控 |
ZenML | Orchestrator 和工件層 |
AWS | 運算和儲存 |
MongoDB | NoSQL資料庫 |
奎德蘭特 | 向量資料庫 |
GitHub 操作 | CI/CD 管道 |
在《LLM 工程師手冊》中,第 2 章將引導您了解每個工具。第 10 章和第 11 章提供了有關如何設定您所需的一切的逐步指南。
以下是目錄概述:
.
├── 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/
是實現 LLM 和 RAG 功能的主要 Python 套件。它遵循領域驅動設計 (DDD) 原則:
domain/
:核心業務實體與結構application/
:業務邏輯、爬蟲和RAG實現model/
:LLM訓練和推理infrastructure/
:外部服務整合(AWS、Qdrant、MongoDB、FastAPI)程式碼邏輯與匯入流程如下: infrastructure
→ model
→ application
→ domain
pipelines/
:包含 ZenML ML 管道,用作所有 ML 管道的入口點。協調 ML 生命週期的資料處理和模型訓練階段。
steps/
:包含單獨的 ZenML 步驟,它們是用於建置和自訂 ZenML 管道的可重複使用元件。步驟執行特定任務(例如,資料載入、預處理),並且可以在 ML 管道內組合。
tests/
:涵蓋一些在 CI 管道中用作範例的範例測試。
tools/
:用於呼叫 ZenML 管道和推理程式碼的實用程式腳本:
run.py
:執行 ZenML 管線的入口點腳本。ml_service.py
:啟動 REST API 推理伺服器。rag.py
:示範 RAG 檢索模組的用法。data_warehouse.py
:用於透過 JSON 檔案從 MongoDB 資料倉儲匯出或匯入資料。 configs/
:ZenML YAML 設定文件,用於控制管道和步驟的執行。
code_snippets/
:可以獨立執行的獨立程式碼範例。
首先克隆儲存庫並導航到專案目錄:
git clone https://github.com/PacktPublishing/LLM-Engineers-Handbook.git
cd LLM-Engineers-Handbook
接下來,我們必須準備您的 Python 環境及其相鄰的依賴項。
該專案需要Python 3.11。您可以使用全域 Python 安裝,也可以使用 pyenv 設定特定於專案的版本。
驗證您的 Python 版本:
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
筆記
此專案包含一個.python-version
文件,當您位於專案目錄中時,該檔案會自動設定正確的 Python 版本。
此專案使用 Poetry 進行依賴管理。
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
這將:
作為我們的任務管理器,我們使用 Poe the Poet 來執行所有腳本。
poetry shell
poetry poe ...
如果您在使用poethepoet
時遇到問題,您仍然可以直接透過 Poetry 執行專案命令。方法如下:
pyproject.toml
中尋找命令定義poetry run
與底層指令而不是:
poetry poe local-infrastructure-up
使用 pyproject.toml 中的直接命令:
poetry run < actual-command-from-pyproject-toml >
注意:所有專案指令都在 pyproject.toml 的 [tool.poe.tasks] 部分中定義
現在,讓我們使用所有必要的憑證和令牌來配置本地項目以在本地運行程式碼。
安裝所有依賴項後,您必須使用您的憑證建立並填入.env
文件,以便與其他服務正確互動並執行專案。在.env
檔案中設定敏感憑證是一種良好的安全實踐,因為該檔案不會提交到 GitHub 或與其他任何人共用。
cp .env.example .env # The file must be at your repository's root!
.env
檔案中的所有基本變數以幫助您入門。以下是我們在本地工作時必須完成的強制設定: 若要對 OpenAI 的 API 進行身份驗證,您必須使用身份驗證令牌填寫OPENAI_API_KEY
環境變數。
OPENAI_API_KEY = your_api_key_here
→ 請參閱本教學課程,了解如何從 OpenAI 提供一個。
若要對 Hugging Face 進行身份驗證,您必須使用身份驗證令牌填寫HUGGINGFACE_ACCESS_TOKEN
環境變數。
HUGGINGFACE_ACCESS_TOKEN = your_token_here
→ 請參閱本教學課程,以了解如何從 Hugging Face 中提供一個。
若要對 Comet ML(僅在訓練期間需要)和 Opik 進行身份驗證,您必須使用身份驗證令牌填寫COMET_API_KEY
環境變數。
COMET_API_KEY = your_api_key_here
→ 請參閱本教學課程,了解如何從上方取得 Comet ML 變數。您也可以使用? 此連結存取 Opik 的儀表板。
將專案部署到雲端時,我們必須對 Mongo、Qdrant 和 AWS 進行額外設定。如果您只是在本地工作,這些環境變數的預設值將立即可用。詳細的部署說明可在 LLM 工程師手冊的第 11 章中找到。
我們必須使用指向雲端 MongoDB 叢集的 URL 來變更DATABASE_HOST
環境變數。
DATABASE_HOST = your_mongodb_url
→ 查看本教學課程,了解如何免費建立和託管 MongoDB 叢集。
將USE_QDRANT_CLOUD
變更為true
,將QDRANT_CLOUD_URL
變更為指向您的雲端 Qdrant 叢集的 URL,將QDRANT_APIKEY
變更為其 API 金鑰。
USE_QDRANT_CLOUD = true
QDRANT_CLOUD_URL = your_qdrant_cloud_url
QDRANT_APIKEY = your_qdrant_api_key
→ 查看本教學課程,了解如何免費建立 Qdrant 集群
為了讓您的 AWS 設定正常運作,您需要在本機上安裝 AWS CLI,並使用管理員使用者(或具有足夠權限建立新 SageMaker、ECR 和 S3 資源的使用者;使用管理員使用者將進行正確設定)讓一切變得更簡單)。
第 2 章提供有關如何安裝 AWS CLI、在 AWS 上建立管理員使用者以及取得存取金鑰以設定AWS_ACCESS_KEY
和AWS_SECRET_KEY
環境變數的逐步說明。如果您已經有 AWS 管理員用戶,則必須在.env
檔案中配置下列環境變數:
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
AWS 憑證通常儲存在~/.aws/credentials
中。您可以使用cat
或類似命令直接查看該檔案:
cat ~ /.aws/credentials
重要的
settings.py 中提供了其他設定選項。 Settings
類別中的任何變數都可以透過.env
檔案進行設定。
在本機執行專案時,我們使用 Docker 來託管 MongoDB 和 Qdrant 資料庫。此外,還可以透過其 Python 套件提供測試 ZenML 伺服器。
警告
您需要安裝 Docker (>= v27.1.1)
為了方便使用,您可以使用以下命令啟動整個本機開發基礎架構:
poetry poe local-infrastructure-up
此外,您可以使用以下命令停止 ZenML 伺服器和所有 Docker 容器:
poetry poe local-infrastructure-down
警告
在 MacOS 上執行時,在啟動伺服器之前,匯出以下環境變數: export OBJC_DISABLE_INITIALIZE_FORK_SAFETY=YES
否則,本機伺服器和管道之間的連線將中斷。 ?本期有更多詳細資料。使用 Poe the Poet 時預設會執行此操作。
啟動即時推理RESTful API:
poetry poe run-inference-ml-service
重要的
由 RESTful API 呼叫的 LLM 微服務只有在將 LLM 部署到 AWS SageMaker 後才會運作。
儀表板 URL: localhost:8237
預設憑證:
username
:預設password
:→ 了解更多有關使用和設定 ZenML 的資訊。
REST API URL: localhost:6333
儀表板 URL: localhost:6333/dashboard
→ 了解有關透過 Docker 使用和設定 Qdrant 的更多資訊。
資料庫 URI: mongodb://llm_engineering:[email protected]:27017
資料庫名稱: twin
預設憑證:
username
:llm_engineeringpassword
:llm_engineering→ 了解有關透過 Docker 使用和設定 MongoDB 的更多資訊。
您可以使用IDE MongoDB 外掛程式(必須單獨安裝)搜尋 MongoDB 集合,其中必須使用資料庫 URI 連接到 Docker 容器中託管的 MongoDB 資料庫: mongodb://llm_engineering:[email protected]:27017
重要的
與訓練或運行 LLM 相關的所有內容(例如訓練、評估、推理)只有在您設定了 AWS SageMaker 後才能運行,如下一節有關雲端基礎架構的說明。
這裡我們將快速介紹如何將專案部署到AWS和其他無伺服器服務。我們不會詳細介紹(因為書中介紹了所有內容),而僅指出您必須經歷的主要步驟。
首先,使用 AWS 群組重新安裝 Python 依賴項:
poetry install --with aws
筆記
第 10 章「使用 AWS SageMaker 實作 LLM 微服務」部分提供了逐步說明。
此時,我們希望您已安裝 AWS CLI,並使用 AWS 管理員使用者正確配置您的 AWS CLI 和專案的環境變數(在.env
檔案內)。
為了確保最佳實踐,我們必須建立一個新的 AWS 用戶,該用戶僅限於建立和刪除與 AWS SageMaker 相關的資源。透過運行創建它:
poetry poe create-sagemaker-role
它將使用新的AWS_ACCESS_KEY
和AWS_SECRET_KEY
值在儲存庫的根目錄下建立sagemaker_user_credentials.json
檔案。但在取代新的 AWS 憑證之前,也要執行以下命令來建立執行角色(使用您的管理員憑證建立它)。
若要建立 AWS SageMaker 用於代表我們存取其他 AWS 資源的 IAM 執行角色,請執行下列命令:
poetry poe create-sagemaker-execution-role
它將使用新的AWS_ARN_ROLE
值在儲存庫的根目錄下建立sagemaker_execution_role.json
檔案。將其新增至您的.env
檔案。
更新.env
檔案中的AWS_ACCESS_KEY
、 AWS_SECRET_KEY
和AWS_ARN_ROLE
值後,您就可以使用 AWS SageMaker。請注意,此步驟對於完成 AWS 設定至關重要。
我們透過執行以下命令來透過 ZenML 啟動訓練管道:
poetry poe run-training-pipeline
這將直接在 SageMaker 中使用configs/training.yaml
中的組態啟動訓練程式碼。您可以在 Comet ML 的儀表板中視覺化結果。
我們透過執行以下命令來透過 ZenML 啟動評估管道:
poetry poe run-evaluation-pipeline
這將直接在 SageMaker 中使用configs/evaluating.yaml
中的設定啟動評估程式碼。您可以在儲存到 Hugging Face 設定檔的*-results
資料集中可視化結果。
若要建立 AWS SageMaker 推理終端節點,請執行:
poetry poe deploy-inference-endpoint
要測試它,請運行:
poetry poe test-sagemaker-endpoint
要刪除它,請運行:
poetry poe delete-inference-endpoint
利用 ZenML 的部署功能將 ML 管線、工件和容器部署到 AWS。因此,您必須使用 ZenML Cloud 建立帳戶,並按照他們的指南將 ZenML 堆疊部署到 AWS。否則,我們將在第 11 章「將 LLM Twin 的管道部署到雲端」部分中提供有關您必須執行的操作的逐步說明。
在部署專案時,我們利用 Qdrant 和 MongoDB 的無伺服器選項。因此,您可以遵循 Qdrant 和 MongoDB 的教程,了解如何為每個集群創建免費增值集群,也可以閱讀第 11 章,將 LLM Twin 的管道部署到雲部分,並按照我們的分步說明進行操作。
我們使用 GitHub Actions 來實作 CI/CD 管道。要實現您自己的,您必須分叉我們的儲存庫,並將以下環境變數設定為分叉儲存庫中的操作機密:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_ECR_NAME
AWS_REGION
此外,我們在第 11 章「將 LLMOps 新增至 LLM Twin」部分中提供了有關如何設定所有內容的說明。
如果您建立 Comet 帳戶並正確設定COMET_API_KEY
環境變量,則可以在其自託管儀表板上視覺化結果。由於 Opik 由 Comet 提供支持,因此您無需沿著 Comet 設定任何其他內容:
所有 ML 管道都將由 ZenML 在幕後精心編排。執行實用程式腳本時存在一些例外情況,例如從資料倉儲匯出或匯入。
ZenML 管道是整個專案中大多數流程的入口點。它們位於pipelines/
資料夾下。因此,當您想要理解或調試工作流程時,從 ZenML 管道開始是最好的方法。
要查看正在運行的管道及其結果:
Pipelines
部分feature_engineering
)feature_engineering_run_2024_06_20_18_40_24
)現在,讓我們探索您可以運行的所有管道。從資料收集到培訓,我們將按照自然順序呈現它們,以端到端地完成法學碩士專案。
運行數據收集ETL:
poetry poe run-digital-data-etl
警告
您必須在系統上安裝 Chrome(或其他基於 Chromium 的瀏覽器),LinkedIn 和 Medium 爬蟲才能運作(在背景使用 Selenium)。根據您的 Chrome 版本,Chromedriver 將自動安裝以啟用 Selenium 支援。如果您不想安裝 Chrome,另一個選項是使用我們的 Docker 映像運行所有內容。例如,要運行組合的所有管道,您可以運行poetry poe run-docker-end-to-end-data-pipeline
。請注意,可以調整該命令以支援任何其他管道。
如果由於任何其他原因,您沒有安裝基於 Chromium 的瀏覽器並且不想使用 Docker,那麼您還有另外兩個選項來繞過此 Selenium 問題:
chromedriver_autoinstaller.install()
命令以及其他檢查 Chrome 驅動程式的靜態呼叫和硒。若要新增其他連結以從中收集,請前往configs/digital_data_etl_[author_name].yaml
並將它們新增至links
欄位。此外,您還可以建立一個全新的檔案並在運行時指定它,如下所示: python -m llm_engineering.interfaces.orchestrator.run --run-etl --etl-config-filename configs/digital_data_etl_[your_name].yaml
運行特徵工程管道:
poetry poe run-feature-engineering-pipeline
產生指令資料集:
poetry poe run-generate-instruct-datasets-pipeline
產生偏好資料集:
poetry poe run-generate-preference-datasets-pipeline
將以上所有內容壓縮到單一管道中運作:
poetry poe run-end-to-end-data-pipeline
將資料從資料倉儲匯出到 JSON 檔案:
poetry poe run-export-data-warehouse-to-json
從 JSON 檔案匯入資料到資料倉儲(預設從data/data_warehouse_raw_data
目錄匯入資料):
poetry poe run-import-data-warehouse-from-json
將 ZenML 工件匯出為 JSON:
poetry poe run-export-artifact-to-json-pipeline
這會將以下 ZenML 工件作為 JSON 檔案匯出到output
資料夾(它將採用最新版本):
您可以透過調整configs/export_artifact_to_json.yaml
設定檔來設定要匯出的工件。
運行訓練管道:
poetry poe run-training-pipeline
運行評估管道:
poetry poe run-evaluation-pipeline
警告
為此,請確保您按照設定雲端基礎架構(用於生產)中所述正確配置 AWS SageMaker。
使用測試查詢呼叫 RAG 檢索模組:
poetry poe call-rag-retrieval-module
啟動即時推理RESTful API:
poetry poe run-inference-ml-service
使用測試查詢呼叫推理即時 RESTful API:
poetry poe call-inference-ml-service
請記住,您可以在 Opik 上監控提示痕跡。
警告
為了讓推理服務正常運作,您必須將 LLM 微服務部署到 AWS SageMaker,如設定雲端基礎架構部分所述。
檢查或修復您的 linting 問題:
poetry poe lint-check
poetry poe lint-fix
檢查或修復您的格式問題:
poetry poe format-check
poetry poe format-fix
檢查代碼是否洩漏憑證:
poetry poe gitleaks-check
使用以下命令執行所有測試:
poetry poe test
根據上述設定和使用步驟,假設本地和雲端基礎設施正常運作並且.env
按預期填充,請按照以下步驟端對端運行 LLM 系統:
收集資料: poetry poe run-digital-data-etl
計算特徵: poetry poe run-feature-engineering-pipeline
計算指令資料集: poetry poe run-generate-instruct-datasets-pipeline
計算偏好對齊資料集: poetry poe run-generate-preference-datasets-pipeline
重要的
從現在開始,為了讓這些步驟發揮作用,您需要正確設定 AWS SageMaker,例如執行poetry install --with aws
並填寫與 AWS 相關的環境變數和配置。
SFT 微調 Llamma 3.1: poetry poe run-training-pipeline
對於 DPO,轉到configs/training.yaml
,將finetuning_type
更改為dpo
,然後再次運行poetry poe run-training-pipeline
poetry poe run-evaluation-pipeline
重要的
從現在開始,為了讓這些步驟發揮作用,您需要正確設定 AWS SageMaker,例如執行poetry install --with aws
並填寫與 AWS 相關的環境變數和配置。
僅調用 RAG 檢索模組: poetry poe call-rag-retrieval-module
將 LLM Twin 微服務部署到 SageMaker: poetry poe deploy-inference-endpoint
測試 LLM Twin 微服務: poetry poe test-sagemaker-endpoint
啟動端對端RAG伺服器: poetry poe run-inference-ml-service
測試 RAG 伺服器: poetry poe call-inference-ml-service
本課程是根據 MIT 許可證發布的開源專案。因此,只要您分發我們的許可證並認可我們的工作,您就可以安全地克隆或分叉該項目,並將其用作您想要的任何內容的靈感來源(例如,大學項目、大學學位項目、個人項目等)。