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 | 클라우드 관리 | 설치 가이드 |
힘내 | ≥2.44.0 | 버전 관리 | 다운로드 |
또한 코드는 다음 클라우드 서비스를 사용하고 이에 따라 달라집니다. 지금은 아무것도 할 필요가 없습니다. 사용 방법에 대한 설치 및 배포 섹션을 안내해 드리겠습니다.
서비스 | 목적 |
---|---|
포옹얼굴 | 모델 등록 |
혜성 ML | 실험 추적기 |
오픽 | 신속한 모니터링 |
ZenML | Orchestrator 및 아티팩트 계층 |
AWS | 컴퓨팅 및 스토리지 |
몽고DB | NoSQL 데이터베이스 |
Qdrant | 벡터 데이터베이스 |
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/
: 모든 ML 파이프라인의 진입점 역할을 하는 ZenML 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를 사용하여 모든 스크립트를 실행합니다.
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
로 변경하고, URL이 Cloud Qdrant 클러스터를 가리키는 QDRANT_CLOUD_URL
, API 키가 있는 QDRANT_APIKEY
변경합니다.
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
파일에 다음 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 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 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 추론 엔드포인트를 생성하려면 다음을 실행합니다.
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 버전에 따라 Selenium 지원을 활성화하기 위해 Chrome 드라이버가 자동으로 설치됩니다. 또 다른 옵션은 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 아티팩트가 output
폴더에 JSON 파일로 내보내집니다(최신 버전 사용).
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
중요한
이제부터 이러한 단계가 작동하려면 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
SageMaker에 LLM Twin 마이크로서비스 배포: 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 라이선스에 따라 공개된 오픈 소스 프로젝트입니다. 따라서 귀하가 라이센스를 배포하고 작업을 인정하는 한 이 프로젝트를 안전하게 복제하거나 포크하여 원하는 모든 것(예: 대학 프로젝트, 대학 학위 프로젝트, 개인 프로젝트 등)에 대한 영감의 원천으로 사용할 수 있습니다.