Моделі та платформи ШІ
Розгортання великих мовних моделей на Kubernetes: повний посібник
Великі мовні моделі (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, є кілька передумов, які потрібно розглянути:
- Кластер Kubernetes: Вам потрібно кластер Kubernetes, встановлений та запущений, або локально, або на хмарній платформі, такій як Amazon Elastic Kubernetes Service (EKS) , Google Kubernetes Engine (GKE) , або Azure Kubernetes Service (AKS).
- Підтримка GPU: LLM часто вимагають прискорення GPU для ефективного висновку. Забезпечте, щоб ваш кластер Kubernetes мав доступ до GPU-ресурсів, або через фізичні GPU, або через хмарні екземпляри GPU.
- Реєстр контейнерів: Вам потрібно реєстр контейнерів для зберігання образів Docker LLM. Популярні варіанти включають Docker Hub, Amazon Elastic Container Registry (ECR), Google Container Registry (GCR) або Azure Container Registry (ACR).
- Файли моделі LLM: Отримайте попередньо треновані файли моделі LLM (ваги, конфігурація, токенізація) з відповідного джерела або натренуйте власну модель.
- Контейнеризація: Контейнеризуйте свій застосунок 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 додаткових токенів.
Розширені теми, про які ви повинні знати
Хоча приклад вище демонструє базове розгортання LLM на Kubernetes, є кілька розширених тем та розгляжень:













