Paul Iusztin と Maxime Labonne による LLM エンジニア ハンドブックの公式リポジトリ
この本の目標は、ベスト プラクティスを使用して独自のエンドツーエンド LLM ベースのシステムを作成することです。
最終的にトレーニングされたモデルは、Hugging Face でダウンロードして使用できます。
プロジェクトをローカルにインストールして実行するには、次の依存関係が必要です。
道具 | バージョン | 目的 | インストールリンク |
---|---|---|---|
ピエンフ | ≥2.3.36 | 複数の Python バージョン (オプション) | インストールガイド |
パイソン | 3.11 | 実行環境 | ダウンロード |
詩 | ≥1.8.3 | パッケージ管理 | インストールガイド |
ドッカー | 27.1.1以上 | コンテナ化 | インストールガイド |
AWS CLI | ≥2.15.42 | クラウド管理 | インストールガイド |
Git | ≥2.44.0 | バージョン管理 | ダウンロード |
このコードは、次のクラウド サービスも使用しており、これに依存しています。今のところ、何もする必要はありません。これらの使用方法については、インストールと展開のセクションで説明します。
サービス | 目的 |
---|---|
ハグ顔 | モデルレジストリ |
ML彗星 | 実験トラッカー |
オピック | 迅速な監視 |
ZenML | オーケストレーターとアーティファクト層 |
AWS | コンピューティングとストレージ |
モンゴDB | 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 バージョンを自動的に設定する.python-version
ファイルが含まれています。
このプロジェクトでは、依存関係の管理に 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
ファイルを作成して資格情報を入力し、他のサービスと適切にやり取りしてプロジェクトを実行する必要があります。このファイルは GitHub にコミットされたり、他の人と共有されたりしないため、機密の認証情報を.env
ファイルに設定することは、セキュリティ上の優れた慣行です。
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 章を参照してください。
DATABASE_HOST
環境変数を、クラウド MongoDB クラスターを指す URL に変更する必要があります。
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 データベースをホストします。また、テスト用の ZenML サーバーは、Python パッケージを通じて利用可能です。
警告
Docker がインストールされている必要があります (>= v27.1.1)
使いやすくするために、次のコマンドを使用してローカル開発インフラストラクチャ全体を開始できます。
poetry poe local-infrastructure-up
また、次のコマンドを使用して ZenML サーバーとすべての Docker コンテナを停止することもできます。
poetry poe local-infrastructure-down
警告
MacOS で実行している場合は、サーバーを起動する前に、次の環境変数をエクスポートします。export 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 CLI とプロジェクトの環境変数 ( .env
ファイル内) が AWS 管理者ユーザーで適切に設定されていることが期待されます。
ベストプラクティスを確実に実行するには、AWS SageMaker に関連するリソースの作成と削除のみに制限された新しい AWS ユーザーを作成する必要があります。以下を実行して作成します。
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 Inference エンドポイントを作成するには、次を実行します。
poetry poe deploy-inference-endpoint
テストするには、次を実行します。
poetry poe test-sagemaker-endpoint
削除するには、次を実行します。
poetry poe delete-inference-endpoint
ML パイプライン、アーティファクト、コンテナは、ZenML のデプロイ機能を利用して AWS にデプロイされます。したがって、ZenML Cloud でアカウントを作成し、ZenML スタックを AWS にデプロイするガイドに従う必要があります。それ以外の場合は、第 11 章の「LLM ツインのパイプラインをクラウドにデプロイする」セクションで、実行する必要がある手順を段階的に説明します。
プロジェクトをデプロイする際には、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 章の「LLM Twin への LLMOps の追加」セクションでは、すべてを設定する方法についての手順が説明されています。
Comet アカウントを作成し、 COMET_API_KEY
環境変数を正しく設定すると、自己ホスト型ダッシュボードで結果を視覚化できます。 Opik は Comet を利用しているため、Comet に沿って他に何も設定する必要はありません。
すべての ML パイプラインは、ZenML によって舞台裏で調整されます。データ ウェアハウスからのエクスポートやインポートなど、ユーティリティ スクリプトを実行する場合には、いくつかの例外が存在します。
ZenML パイプラインは、このプロジェクト全体のほとんどのプロセスのエントリ ポイントです。これらは、 pipelines/
フォルダーの下にあります。したがって、ワークフローを理解またはデバッグしたい場合は、ZenML パイプラインから始めるのが最良のアプローチです。
実行中のパイプラインとその結果を確認するには:
Pipelines
セクションに移動しますfeature_engineering
)feature_engineering_run_2024_06_20_18_40_24
)次に、実行できるすべてのパイプラインを調べてみましょう。データ収集からトレーニングまで、LLM プロジェクトをエンドツーエンドで実行できるように、それらを自然な順序で示します。
データ収集 ETL を実行します。
poetry poe run-digital-data-etl
警告
LinkedIn および Medium クローラー (内部で Selenium を使用します) が機能するには、システムに Chrome (または別の Chromium ベースのブラウザ) がインストールされている必要があります。 Chrome のバージョンに基づいて、Chromedriver が自動的にインストールされ、Selenium サポートが有効になります。 Chrome をインストールしたくない場合は、Docker イメージを使用してすべてを実行することもできます。たとえば、すべてのパイプラインを結合して実行するにはpoetry poe run-docker-end-to-end-data-pipeline
実行します。コマンドを調整して他のパイプラインをサポートできることに注意してください。
他の理由で、Chromium ベースのブラウザがインストールされておらず、Docker を使用したくない場合は、この Selenium の問題を回避するための他の 2 つのオプションがあります。
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 にデプロイする必要があります。
lint の問題を確認または修正します。
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
重要
今後、これらの手順を機能させるには、 poetry install --with aws
を実行し、AWS 関連の環境変数と構成を入力するなど、AWS SageMaker を適切にセットアップする必要があります。
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
重要
今後、これらの手順を機能させるには、 poetry install --with aws
を実行し、AWS 関連の環境変数と構成を入力するなど、AWS SageMaker を適切にセットアップする必要があります。
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 ライセンスに基づいてリリースされたオープンソース プロジェクトです。したがって、ライセンスを配布し、私たちの成果を認めている限り、このプロジェクトを安全にクローンまたはフォークして、必要なもの (大学のプロジェクト、大学の学位プロジェクト、個人のプロジェクトなど) のインスピレーションの源として使用できます。