Официальный репозиторий Справочника инженера LLM Пола Юстина и Максима Лабонна.
Цель этой книги — создать собственную комплексную систему на основе LLM, используя лучшие практики:
Вы можете скачать и использовать окончательную обученную модель на Hugging Face.
Чтобы установить и запустить проект локально, вам потребуются следующие зависимости.
Инструмент | Версия | Цель | Ссылка для установки |
---|---|---|---|
pyenv | ≥2.3.36 | Несколько версий Python (необязательно) | Руководство по установке |
Питон | 3.11 | Среда выполнения | Скачать |
Поэзия | ≥1,8,3 | Управление пакетами | Руководство по установке |
Докер | ≥27.1.1 | Контейнеризация | Руководство по установке |
Интерфейс командной строки AWS | ≥2.15.42 | Управление облаком | Руководство по установке |
Гит | ≥2,44,0 | Контроль версий | Скачать |
Код также использует следующие облачные службы и зависит от них. На данный момент вам не нужно ничего делать. В разделах установки и развертывания мы расскажем, как их использовать:
Услуга | Цель |
---|---|
ОбниматьЛицо | Реестр моделей |
Комета МЛ | Трекер экспериментов |
Опик | Оперативный мониторинг |
ДзенМЛ | Оркестратор и слой артефактов |
АВС | Вычисления и хранение |
МонгоБД | База данных NoSQL |
Кдрант | База данных векторов |
Действия GitHub | CI/CD-конвейер |
В главе 2 «Справочника инженера LLM» вы познакомитесь с каждым инструментом. Главы 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/
— это основной пакет Python, реализующий функции LLM и RAG. Он следует принципам доменно-ориентированного проектирования (DDD):
domain/
: Основные бизнес-объекты и структуры.application/
: бизнес-логика, сканеры и реализация RAG.model/
: обучение LLM и выводыinfrastructure/
: интеграция внешних сервисов (AWS, Qdrant, MongoDB, FastAPI) Логика кода и импорт выполняются следующим образом: infrastructure
→ model
→ application
→ domain
pipelines/
: содержит конвейеры машинного обучения ZenML, которые служат точкой входа для всех конвейеров машинного обучения. Координирует этапы обработки данных и обучения модели жизненного цикла машинного обучения.
steps/
: содержит отдельные шаги ZenML, которые представляют собой повторно используемые компоненты для создания и настройки конвейеров ZenML. Шаги выполняют конкретные задачи (например, загрузку данных, предварительную обработку) и могут быть объединены в конвейерах машинного обучения.
tests/
: содержит несколько примеров тестов, используемых в качестве примеров в конвейере CI.
tools/
: служебные сценарии, используемые для вызова конвейеров ZenML и кода вывода:
run.py
: скрипт точки входа для запуска конвейеров ZenML.ml_service.py
: запускает сервер вывода REST API.rag.py
: демонстрирует использование модуля поиска RAG.data_warehouse.py
: используется для экспорта или импорта данных из хранилища данных MongoDB через файлы JSON. 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 >
Примечание. Все команды проекта определены в разделе [tool.poe.tasks] файла pyproject.toml.
Теперь давайте настроим наш локальный проект со всеми необходимыми учетными данными и токенами для локального запуска кода.
После установки всех зависимостей необходимо создать и заполнить файл .env
своими учетными данными для надлежащего взаимодействия с другими службами и запуска проекта. Установка конфиденциальных учетных данных в файле .env
является хорошей практикой обеспечения безопасности, поскольку этот файл не будет передан на GitHub или передан кому-либо еще.
cp .env.example .env # The file must be at your repository's root!
.env
, чтобы начать работу. Ниже приведены обязательные настройки, которые мы должны выполнить при локальной работе: Для аутентификации в API OpenAI вы должны заполнить переменную среды 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. Если вы просто работаете локально, значения по умолчанию для этих переменных окружения будут работать «из коробки». Подробные инструкции по развертыванию доступны в главе 11 «Справочника инженера LLM».
Мы должны изменить переменную среды DATABASE_HOST
, указав URL-адрес, указывающий на ваш облачный кластер MongoDB.
DATABASE_HOST = your_mongodb_url
→ Ознакомьтесь с этим руководством, чтобы узнать, как бесплатно создать и разместить кластер MongoDB.
Измените USE_QDRANT_CLOUD
на true
, QDRANT_CLOUD_URL
с URL-адресом вашего облачного кластера Qdrant и 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, созданию пользователя-администратора на 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
.
При локальном запуске проекта мы размещаем базу данных MongoDB и Qdrant с помощью Docker. Кроме того, тестовый сервер 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
Важный
Микросервис LLM, вызываемый RESTful API, будет работать только после развертывания LLM в AWS SageMaker.
URL-адрес информационной панели: localhost:8237
Учетные данные по умолчанию:
username
: по умолчаниюpassword
:→ Узнайте больше об использовании и настройке ZenML.
URL-адрес REST API: localhost:6333
URL-адрес панели мониторинга: localhost:6333/dashboard
→ Узнайте больше об использовании и настройке Qdrant с Docker.
URI базы данных: mongodb://llm_engineering:[email protected]:27017
Имя базы данных: twin
Учетные данные по умолчанию:
username
: llm_engineeringpassword
: llm_engineering→ Узнайте больше об использовании и настройке MongoDB с Docker.
Вы можете выполнять поиск в своих коллекциях MongoDB с помощью плагина MongoDB для IDE (который необходимо установить отдельно), где вам необходимо использовать URI базы данных для подключения к базе данных MongoDB, размещенной в контейнере Docker: mongodb://llm_engineering:[email protected]:27017
Важный
Все, что связано с обучением или запуском LLM (например, обучение, оценка, выводы), можно выполнить только в том случае, если вы настроили AWS SageMaker, как описано в следующем разделе, посвященном облачной инфраструктуре.
Здесь мы быстро представим, как развернуть проект на AWS и других бессерверных сервисах. Мы не будем вдаваться в подробности (так как в книге все представлено), а лишь укажем основные шаги, которые вам предстоит пройти.
Сначала переустановите зависимости Python с помощью группы AWS:
poetry install --with aws
Примечание
В главе 10 представлены пошаговые инструкции в разделе «Реализация микросервиса LLM с помощью AWS SageMaker».
К этому моменту мы ожидаем, что у вас установлен AWS CLI, а ваш AWS CLI и переменные env проекта (в файле .env
) правильно настроены с помощью администратора AWS.
Чтобы обеспечить лучшие практики, мы должны создать нового пользователя AWS, которому будет разрешено создавать и удалять только ресурсы, связанные с AWS SageMaker. Создайте его, запустив:
poetry poe create-sagemaker-role
В корне вашего репозитория будет создан файл sagemaker_user_credentials.json
с вашими новыми значениями AWS_ACCESS_KEY
и AWS_SECRET_KEY
. Но прежде чем заменять новые учетные данные AWS, также выполните следующую команду, чтобы создать роль выполнения (чтобы создать ее с использованием учетных данных администратора).
Чтобы создать роль выполнения IAM, используемую AWS SageMaker для доступа к другим ресурсам AWS от нашего имени, выполните следующую команду:
poetry poe create-sagemaker-execution-role
В корне вашего репозитория будет создан файл sagemaker_execution_role.json
с новым значением AWS_ARN_ROLE
. Добавьте его в свой файл .env
.
После обновления значений AWS_ACCESS_KEY
, AWS_SECRET_KEY
и AWS_ARN_ROLE
в файле .env
вы можете использовать AWS SageMaker. Обратите внимание, что этот шаг имеет решающее значение для завершения настройки AWS.
Мы запускаем конвейер обучения через ZenML, выполнив следующее:
poetry poe run-training-pipeline
Это запустит код обучения с использованием конфигураций из configs/training.yaml
непосредственно в SageMaker. Вы можете визуализировать результаты на панели инструментов Comet ML.
Мы запускаем конвейер оценки через ZenML, выполнив следующее:
poetry poe run-evaluation-pipeline
Это запустит оценочный код с использованием конфигураций из configs/evaluating.yaml
непосредственно в SageMaker. Вы можете визуализировать результаты в наборах данных *-results
сохраненных в вашем профиле Hugging Face.
Чтобы создать конечную точку вывода AWS SageMaker, выполните:
poetry poe deploy-inference-endpoint
Чтобы проверить это, запустите:
poetry poe test-sagemaker-endpoint
Чтобы удалить его, запустите:
poetry poe delete-inference-endpoint
Конвейеры, артефакты и контейнеры ML развертываются на AWS с использованием функций развертывания ZenML. Таким образом, вам необходимо создать учетную запись в ZenML Cloud и следовать их руководству по развертыванию стека ZenML в AWS. В противном случае мы предоставим пошаговые инструкции о том, что вам нужно сделать, в главе 11 , раздел «Развертывание конвейеров LLM Twin в облаке» .
При развертывании проекта мы используем бессерверные возможности Qdrant и MongoDB. Таким образом, вы можете либо следовать руководствам Qdrant и MongoDB о том, как создать кластер Freemium для каждого из них, либо просмотреть главу 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
)Теперь давайте рассмотрим все конвейеры, которые вы можете запустить. От сбора данных до обучения мы представим их в естественном порядке, чтобы пройти весь проект LLM от начала до конца.
Запустите сбор данных ETL:
poetry poe run-digital-data-etl
Предупреждение
Для работы сканеров LinkedIn и Medium (которые используют Selenium под капотом) в вашей системе должен быть установлен Chrome (или другой браузер на основе Chromium). В зависимости от вашей версии Chrome будет автоматически установлен Chromedriver для включения поддержки Selenium. Другой вариант — запустить все, используя наш образ Docker, если вы не хотите устанавливать Chrome. Например, чтобы запустить все конвейеры вместе, вы можете запустить poetry poe run-docker-end-to-end-data-pipeline
. Обратите внимание, что команду можно настроить для поддержки любого другого конвейера.
Если по какой-либо другой причине у вас не установлен браузер на базе Chromium и вы не хотите использовать Docker, у вас есть два других варианта обойти эту проблему с Selenium:
chromedriver_autoinstaller.install()
из application.crawlers.base и другие статические вызовы, которые проверяют наличие драйверов 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
Помните, что следить за оперативными следами можно на Опике.
Предупреждение
Чтобы служба вывода работала, у вас должен быть развернут микросервис LLM в AWS SageMaker, как описано в разделе «Настройка облачной инфраструктуры».
Проверьте или устраните проблемы с ворсом:
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. Таким образом, пока вы распространяете нашу ЛИЦЕНЗИЮ и признаете нашу работу, вы можете безопасно клонировать или разветвлять этот проект и использовать его в качестве источника вдохновения для чего угодно (например, университетских проектов, проектов для получения диплома колледжа, личных проектов и т. д.).