Развертывание моделей машинного обучения и управление службой было проблемой для многих специалистов по данным и инженеров. Это сложный процесс, который включает в себя создание службы, предоставление API, выбор правильной инфраструктуры развертывания и баз данных, а также управление производственными системами. Все эти шаги включают в себя множество лучших практик и методологий, которые профессионалы могут изучить только в процессе.
Но в качестве отправной точки я попытался упростить начальное развертывание модели машинного обучения в Google Kubernetes Engin (GKE) за 6 простых шагов. Я также предоставил скелет репозитория кода, чтобы предоставить API для любой модели, использующей Django, и развернуть его на GKE.
Основы развертывания модели машинного обучения (и используемых технологий) –
- Создайте модель и получите код прогноза (используя Hugging Face)
- Напишите службу для предоставления API (с использованием Python Django)
- Получить базу данных для хранения входных данных и прогнозов (используя Sqlite)
- Создайте контейнерное приложение (используя Docker)
- Разверните контейнерное приложение (используя Kubernetes для простого развертывания, управления и масштабирования приложений)
Давайте начнем прямо сейчас (не стесняйтесь также обращаться к ссылкам ниже, если это необходимо)
Шаг 1. Настройте репозиторий с API Django.
- Клонируйте репозиторий здесь — в этом репозитории есть код для развертывания модели gpt2-medium для генерации текста из библиотеки обнимающих лиц.
git clone https://github.com/vedvasu/deploy-gcp-kubernetes.git
- Настройте и протестируйте сервис на локальном хосте
# Setup a virtual environment cd deploy-gcp-kubernetes python3 -m pip install --user virtualenv python3 -m venv venv source venv/bin/activate # Install Requirements cd django_app pip install --upgrade pip pip install -r requirements.txt # Run migrations python manage.py makemigrations gpt2 python manage.py migrate # Create a superuser export DJANGO_SUPERUSER_USERNAME="username" export DJANGO_SUPERUSER_PASSWORD="password" export DJANGO_SUPERUSER_EMAIL="[email protected]" python manage.py createsuperuser --noinput python manage.py runserver # Try the API now on the browser - http://127.0.0.1:8000/generate/
- Мы также можем запросить базу данных, чтобы увидеть исторические прогнозы.
# Try the explorer API with usename and password set above http://127.0.0.1:8000/explorer/play SELECT * from gpt2_generatedtext
Шаг 2. Установите докер и попробуйте запустить докеризованную службу на локальном хосте.
- Установите докер отсюда и запустите его на своей локальной машине. Запуск
docker ps
подтвердит установку. - Давайте теперь создадим образ докера и проверим, работает ли служба докера.
# From inside the `django_app` directory build the docker image docker build -f ../docker/Dockerfile -t django-app:latest . docker ls docker run -p 8000:8000 django-app # Try the model API now - http://127.0.0.1:8000/generate/
Шаг 3: Создайте учетную запись Google Cloud и установите интерфейс командной строки Google Cloud.
- Бесплатный аккаунт с кредитами 300$ можно создать здесь.
- Создайте новый проект из консоли со следующими конфигами:
Project Name: Django GCP Kubernetes Project Id: gcp-kubernetes-1 # The same will be used later
- Загрузите Google Cloud CLI здесь. Следуйте инструкциям и убедитесь, что учетная запись, проект и т. д. настроены правильно.
# Execute from the download folder in the same virtual environment ./google-cloud-sdk/install.sh ./google-cloud-sdk/bin/gcloud init # Setup for project_id # From a new shell check is the `gcloud` is working cd deploy-gcp-kubernetes source venv/bin/activate cd django_app gcloud
- Настройте Kubernetes и установите инструмент командной строки
kubectl
gcloud components install kubectl
kubectl version
Шаг 4. Создайте репозиторий в реестре Google Artifacts и отправьте образ докера.
- Включите Реестр артефактов из консоли Google Cloud.
- Теперь давайте создадим репозиторий, в котором будет храниться образ докера для приложения, которое будет развернуто в Kubernetes Engine.
gcloud config set project
gcp-kubernetes-1gcloud artifacts locations list #Check for available locations
gcloud artifacts repositories create django-gcp-kubernetes --repository-format=docker --location=us-central1 --description="Docker repository"
- Создайте образ Docker и отправьте его в реестр артефактов.
# The name of image has to in specific format docker build -f ../docker/Dockerfile -t us-central1-docker.pkg.dev/gcp-kubernetes-1/django-gcp-kubernetes
/django-app:v1 .gcloud auth configure-docker
us-central1-docker.pkg.dev
# Push the image to the Artifacts Registry docker push us-central1-docker.pkg.dev/gcp-kubernetes-1/django-gcp-kubernetes
/django-app:v1
Шаг 5. Создайте кластер в кластере Google Kubernetes и разверните приложение Django.
- Включите Google Kubernetes Engine из консоли Google Cloud.
- Создайте новый кластер для развертывания службы
# Create a cluster with name "cluster-1" with 16GB RAM machinegcloud container clusters create
cluster-1 --zone us-central1-c --machine-type e2-standard-4 # Configure kubectl for "cluster-1" gcloud components install gke-gcloud-auth-plugin gke-gcloud-auth-plugin --version gcloud container clusters get-credentials cluster-1 --zone=us-central1-ckubectl get nodes
- Разверните сервис (образ докера из реестра артефактов)
kubectl create deployment django-app --image=
us-central1-docker.pkg.dev/gcp-kubernetes-1/django-gcp-kubernetes
/django-app:v1kubectl scale deployment django-app --replicas=3
kubectl autoscale deployment django-app --cpu-percent=80 --min=1 --max=5
kubectl get pods
Шаг 6. Сделайте сервис общедоступным
# Explose the service on the public domain (Will take 4-5 min)kubectl expose deployment django-app --name=django-app-service --type=LoadBalancer --port 80 --target-port 8000
kubectl get service
# Try the model API now (Replace the IP with your EXTERNAL-IP) http://104.197.243.125/generate/
Помните, что это всего лишь отправная точка, и для создания службы производственного уровня потребуется множество изменений в отношении методологии кода, конфигураций кластера, баз данных и т. д., но я надеюсь, что это было полезно, чтобы обогатить ваше понимание развертывания моделей машинного обучения и с чего-то начать: )
Большое спасибо Manjunath Mugali и Diksha Tripath за активное сотрудничество в этом блоге и за помощь в решении множества вопросов.
Ресурсы: