Моделі та платформи ШІ

Розгортання великих мовних моделей на Kubernetes: повний посібник

mm
Додайте Unite.AI до бажаних джерел у Google
Kubernetes and gpu Large Language Models: A Complete Guide

Великі мовні моделі (LLM) здатні розуміти та генерувати текст, подібний до людського, що робить їх невід’ємними для широкого спектра застосунків, таких як чат-боти, генерація контенту та переклад мови.

Однак, розгортання LLM може бути складним завданням через їх величезний розмір та обчислювальні вимоги. Kubernetes, відкрита система оркестрування контейнерів, забезпечує потужне рішення для розгортання та керування LLM у масштабі. У цьому технічному блозі ми дослідимо процес розгортання LLM на Kubernetes, охоплюючи різні аспекти, такі як контейнеризація, розподіл ресурсів та масштабованість.

Поняття великих мовних моделей

Перш ніж зануритися у процес розгортання, давайте коротко зрозуміємо, що таке великі мовні моделі та чому вони привертають таку увагу.

Великі мовні моделі (LLM) – це тип нейронної мережевої моделі, навченої на величезних обсягах текстових даних. Ці моделі вчаться розуміти та генерувати людську мову, аналізуючи закономірності та взаємозв’язки всередині навчальних даних. Наприклад, популярні LLM включають GPT (Генеративна попередньо тренована трансформер), BERT (Бідирекціональні кодування трансформерів) та XLNet.

LLM досягли вражаючих результатів у різних завданнях NLP, таких як генерація тексту, переклад мови та відповідь на питання. Однак їх величезний розмір та обчислювальні вимоги створюють суттєві проблеми для розгортання та висновку.

Чому Kubernetes для розгортання LLM?

Kubernetes – це відкрита система оркестрування контейнерів, яка автоматизує розгортання, масштабування та керування контейнеризованими застосунками. Вона забезпечує кілька переваг для розгортання LLM, включаючи:

  • Масштабованість: Kubernetes дозволяє масштабувати ваше розгортання LLM горизонтально, додаючи або видаляючи обчислювальні ресурси за потребою, забезпечуючи оптимальне використання ресурсів та продуктивність.
  • Керування ресурсами: Kubernetes забезпечує ефективне розподіл ресурсів та ізоляцію, забезпечуючи, щоб ваше розгортання LLM мало доступ до необхідних обчислювальних, пам’яті та GPU-ресурсів.
  • Висока доступність: Kubernetes забезпечує вбудовані механізми для самозцілення, автоматичних оновлень та відкату, забезпечуючи, щоб ваше розгортання LLM залишалося високодоступним та стійким до збоїв.
  • Портативність: Контейнеризовані розгортання LLM можна легко перемістити між різними середовищами, такими як локальні центри даних або хмарні платформи, без потреби у великих змін.
  • Підтримка екосистеми та спільноти: Kubernetes має велику та активну спільноту, яка забезпечує велику кількість інструментів, бібліотек та ресурсів для розгортання та керування складними застосунками, такими як LLM.

Підготовка до розгортання LLM на Kubernetes:

Перш ніж розгорнути LLM на Kubernetes, є кілька передумов, які потрібно розглянути:

  1. Кластер Kubernetes: Вам потрібно кластер Kubernetes, встановлений та запущений, або локально, або на хмарній платформі, такій як Amazon Elastic Kubernetes Service (EKS) , Google Kubernetes Engine (GKE) , або Azure Kubernetes Service (AKS).
  2. Підтримка GPU: LLM часто вимагають прискорення GPU для ефективного висновку. Забезпечте, щоб ваш кластер Kubernetes мав доступ до GPU-ресурсів, або через фізичні GPU, або через хмарні екземпляри GPU.
  3. Реєстр контейнерів: Вам потрібно реєстр контейнерів для зберігання образів Docker LLM. Популярні варіанти включають Docker Hub, Amazon Elastic Container Registry (ECR), Google Container Registry (GCR) або Azure Container Registry (ACR).
  4. Файли моделі LLM: Отримайте попередньо треновані файли моделі LLM (ваги, конфігурація, токенізація) з відповідного джерела або натренуйте власну модель.
  5. Контейнеризація: Контейнеризуйте свій застосунок LLM, використовуючи Docker або подібну систему виконання контейнерів. Це включає створення файлу Docker, який пакує ваш код LLM, залежності та файли моделі у образ Docker.

Розгортання LLM на Kubernetes

Як тільки ви маєте передумови на місці, ви можете продовжити з розгортанням свого LLM на Kubernetes. Процес розгортання зазвичай включає наступні кроки:

Створення образу Docker

Створіть образ Docker для свого застосунку LLM, використовуючи наданий файл Docker та завантажте його до реєстру контейнерів.

Створення ресурсів Kubernetes

Визначте ресурси Kubernetes, необхідні для вашого розгортання LLM, такі як розгортання, служби, ConfigMaps та секрети. Ці ресурси зазвичай визначаються за допомогою маніфестів YAML або JSON.

Конфігурація вимог до ресурсів

Вкажіть вимоги до ресурсів для вашого розгортання LLM, включаючи CPU, пам’ять та GPU-ресурси. Це забезпечує, щоб ваше розгортання мало доступ до необхідних обчислювальних ресурсів для ефективного висновку.

Розгортання на Kubernetes

Використовуйте інструмент командної строки kubectl або інструмент керування Kubernetes (наприклад, Kubernetes Dashboard, Rancher або Lens), щоб застосувати маніфести Kubernetes та розгорнути свій застосунок LLM.

Моніторинг та масштабування

Моніторьте продуктивність та використання ресурсів вашого розгортання LLM, використовуючи інструменти моніторингу Kubernetes, такі як Prometheus та Grafana. Регулюйте розподіл ресурсів або масштабуйте ваше розгортання за потребою, щоб задовольнити запит.

Приклад розгортання

Розглянемо приклад розгортання моделі мови GPT-3 на Kubernetes, використовуючи попередньо створений образ Docker від Hugging Face. Ми припускаємо, що у вас встановлений та налаштований кластер Kubernetes з підтримкою GPU.

Отримання образу Docker:


<p>docker pull huggingface/text-generation-inference:1.1.0</p>

Створення розгортання Kubernetes:

Створіть файл з назвою gpt3-deployment.yaml з наступним вмістом:


<p>apiVersion: apps/v1
kind: Deployment
metadata:
name: gpt3-deployment
spec:
replicas: 1
selector:
matchLabels:
app: gpt3
template:
metadata:
labels:
app: gpt3
spec:
containers:
- name: gpt3
image: huggingface/text-generation-inference:1.1.0
resources:
limits:
nvidia.com/gpu: 1
env:
- name: MODEL_ID
value: gpt2
- name: NUM_SHARD
value: "1"
- name: PORT
value: "8080"
- name: QUANTIZE
value: bitsandbytes-nf4</p>

Це розгортання вказує, що ми хочемо запустити один екземпляр контейнера gpt3, використовуючи образ Docker huggingface/text-generation-inference:1.1.0. Розгортання також встановлює змінні середовища, необхідні для контейнера, щоб завантажити модель GPT-3 та налаштувати сервер висновку.

Створення служби Kubernetes:

Створіть файл з назвою gpt3-service.yaml з наступним вмістом:


<p>apiVersion: v1
kind: Service
metadata:
name: gpt3-service
spec:
selector:
app: gpt3
ports:
- port: 80
targetPort: 8080
type: LoadBalancer</p>

Ця служба експонує розгортання gpt3 на порту 80 та створює службу типу LoadBalancer, щоб зробити сервер висновку доступним ззовні кластера Kubernetes.

Розгортання на Kubernetes:

Застосуйте маніфести Kubernetes, використовуючи інструмент командної строки kubectl:


<p>kubectl apply -f gpt3-deployment.yaml
kubectl apply -f gpt3-service.yaml</p>

Моніторинг розгортання:

Моніторьте прогрес розгортання, використовуючи наступні команди:


<p>kubectl get pods
kubectl logs </p>

Як тільки под запущений та журнали вказують, що модель завантажена та готова, ви можете отримати зовнішню IP-адресу служби LoadBalancer:


kubectl get service gpt3-service

Тестування розгортання:

Тепер ви можете надсилати запити до сервера висновку, використовуючи зовнішню IP-адресу та порт, отримані з попереднього кроку. Наприклад, використовуючи curl:


<p>curl -X POST \
http://:80/generate \
-H 'Content-Type: application/json' \
-d '{"inputs": "The quick brown fox", "parameters": {"max_new_tokens": 50}}'</p>

Ця команда надсилає запит генерації тексту до сервера висновку GPT-3, запитуючи продовжити промпт “The quick brown fox” до 50 додаткових токенів.

Розширені теми, про які ви повинні знати

Kubernetes logo LLM GPU

Хоча приклад вище демонструє базове розгортання LLM на Kubernetes, є кілька розширених тем та розгляжень:

1. Автомасштабування

Kubernetes підтримує горизонтальне та вертикальне автомасштабування, яке може бути корисним для розгортань LLM через їх змінні обчислювальні вимоги. Горизонтальне автомасштабування дозволяє автоматично масштабувати кількість реплік (подів) на основі метрик, таких як використання CPU або пам’яті. Вертикальне автомасштабування, з іншого боку, дозволяє динамічно регулювати вимоги до ресурсів та обмеження для ваших контейнерів.

Для активації автомасштабування ви можете використовувати Kubernetes Horizontal Pod Autoscaler (HPA) та Vertical Pod Autoscaler (VPA). Ці компоненти моніторять ваше розгортання та автоматично масштабують ресурси на основі попередньо визначених правил та порогів.

2. Планування та спільне використання GPU

У сценаріях, коли кілька розгортань LLM або інших обчислювально-інтенсивних застосунків працюють на одному кластері Kubernetes, ефективне планування та спільне використання GPU стають важливими. Kubernetes забезпечує кілька механізмів для забезпечення справедливого та ефективного використання GPU, таких як плагіни пристроїв GPU, селектори вузлів та обмеження ресурсів.

Ви також можете використовувати розширені техніки планування GPU, такі як NVIDIA Multi-Instance GPU (MIG) (NVDA ) або AMD Memory Pool Remapping (MPR), щоб віртуалізувати GPU та розділяти їх між кількома застосунками.

3. Паралелізм моделі та шардування

Деякі LLM, особливо ті, які мають мільярди або трильйони параметрів, можуть не поміститися повністю у пам’ять одного GPU або навіть одного вузла. У таких випадках ви можете використовувати техніки паралелізму моделі та шардування, щоб розподілити модель по кільком GPU або вузлам.

Паралелізм моделі включає розділення архітектури моделі на різні компоненти (наприклад, кодувальник, декодувальник) та розподіл їх по кільком пристроям. Шардування, з іншого боку, включає розділення параметрів моделі та розподіл їх по кільком пристроям або вузлам.

Kubernetes забезпечує механізми, такі як StatefulSets та Custom Resource Definitions (CRDs), для керування та оркестрування розподілених розгортань LLM з паралелізмом моделі та шардуванням.

4. Настройка та безперервне навчання

У багатьох випадках попередньо треновані LLM можуть потребувати настройки або безперервного навчання на домен-специфічних даних для покращення їх продуктивності для конкретних завдань або доменів. Kubernetes може полегшити цей процес, забезпечуючи масштабовану та стійку платформу для виконання завдань настройки або безперервного навчання.

Ви можете використовувати фреймворки обробки пакетів Kubernetes, такі як Apache Spark або Kubeflow, для виконання розподілених завдань настройки або навчання моделей LLM. Крім того, ви можете інтегрувати свої настроєні або безперервно треновані моделі з вашими розгортаннями висновку, використовуючи механізми Kubernetes, такі як оновлення з роллінгом або сині/зелені розгортання.

5. Моніторинг та спостережливість

Моніторинг та спостережливість є важливими аспектами будь-якого розгортання виробництва, включаючи розгортання LLM на Kubernetes. Kubernetes забезпечує вбудовані рішення моніторингу, такі як Prometheus та інтеграції з популярними платформами спостережливості, такими як Grafana, Elasticsearch та Jaeger.

Ви можете моніторити різні метрики, пов’язані з вашими розгортаннями LLM, такі як використання CPU та пам’яті, використання GPU, затримку висновку та пропускну здатність. Крім того, ви можете зібрати та проаналізувати журнали застосунку та траси, щоб отримати уявлення про поведінку та продуктивність ваших моделей LLM.

6. Безпека та відповідність

Залежно від вашого випадку використання та чутливості даних, які залучені, ви можете потребувати розглянути питання безпеки та відповідності під час розгортання LLM на Kubernetes. Kubernetes забезпечує кілька функцій та інтеграцій для підвищення безпеки, таких як політики мережі, рольове керування доступом (RBAC), керування секретами та інтеграція з зовнішніми рішеннями безпеки, такими як HashiCorp Vault (HCP ) або AWS Secrets Manager.

Крім того, якщо ви розгортаєте LLM у регульованих галузях або обробляєте чутливі дані, ви можете потребувати забезпечення відповідності відповідним стандартам та регуляціям, таким як GDPR, HIPAA або PCI-DSS.

7. Багатохмарні та гібридні розгортання

Хоча цей блог-пост фокусується на розгортанні LLM на одному кластері Kubernetes, ви можете потребувати розглянути багатохмарні або гібридні розгортання у деяких сценаріях. Kubernetes забезпечує єдину платформу для розгортання та керування застосунками на різних хмарних постачальниках та локальних центрах даних.

Ви можете використовувати інструменти федерації Kubernetes або багатохмарного керування, такі як KubeFed або GKE Hub, для керування та оркестрування розгортань LLM на кількох кластерах Kubernetes, що охоплюють різні хмарні постачальники або гібридні середовища.

Ці розширені теми підкреслюють гнучкість та масштабованість Kubernetes для розгортання та керування LLM.

Висновок

Розгортання великих мовних моделей (LLM) на Kubernetes пропонує численні переваги, включаючи масштабованість, керування ресурсами, високу доступність та портативність. Виконуючи кроки, описані в цьому технічному блозі, ви можете контейнеризувати свій застосунок LLM, визначити необхідні ресурси Kubernetes та розгорнути його на кластер Kubernetes.

Однак, розгортання LLM на Kubernetes – це лише перший крок. По мірі зростання вашого застосунку та зміни вимог ви можете потребувати розглянути розширені теми, такі як автомасштабування, планування GPU, паралелізм моделі, настройка, моніторинг, безпека та багатохмарні розгортання.

Kubernetes забезпечує потужну та розширну платформу для розгортання та керування LLM, дозволяючи вам будувати надійні, масштабовані та безпечні застосунки.

Я провів останні п'ять років, занурючись у захопливий світ машинного навчання та глибокого навчання. Моя пристрасть та експертиза привели мене до внеску у понад 50 різних проектів програмної інженерії, з особливим акцентом на AI/ML. Моя тривала цікавість також привела мене до природної обробки мови, галузі, яку я бажаю дослідити далі.