Я использую модель Tensorflow в кластере AKS с узлами графического процессора. В настоящее время модель работает в одном контейнере обслуживания TF (https://hub.docker.com/r/tensorflow/serving) в одном модуле на одном узле графического процессора.
По умолчанию обслуживающий контейнер TF будет требовать всю доступную оперативную память в модуле, но я могу уменьшить масштаб запроса памяти контейнером в моем deployment.yaml
файле и по-прежнему получать те же результаты с приемлемым временем обработки. Мне было интересно, есть ли возможность запускать две модели TF параллельно на одном узле GPU. С точки зрения памяти это должно работать, но когда я пытаюсь адаптировать набор реплик своего развертывания к двум, он пытается развернуть два модуля, но второй зависает в состоянии ожидания.
$ kubectl get po -n myproject -w
NAME READY STATUS RESTARTS AGE
myproject-deployment-cb7769df4-ljcfc 1/1 Running 0 2m
myproject-deployment-cb7769df4-np9qd 0/1 Pending 0 26s
Если я описываю модуль, я получаю следующую ошибку
$ kubectl describe po -n myproject myproject-deployment-cb7769df4-np9qd
Name: myproject-deployment-cb7769df4-np9qd
Namespace: myproject
<...>
Events:
Type Reason Age From Message
---- ------ ---- ---- -------
Warning FailedScheduling 105s default-scheduler 0/1 nodes are available: 1 Insufficient nvidia.com/gpu.
Поскольку первый модуль «требует» графического процессора, второй модуль больше не может его использовать и остается в состоянии ожидания. Я вижу две разные возможности:
- Запуск двух обслуживающих контейнеров TF в одном модуле на одном узле GPU
- Запуск двух модулей, каждый с одним обслуживающим контейнером TF на одном узле графического процессора.
Возможен ли какой-либо из вышеперечисленных вариантов?
Мое развертывание можно найти ниже.
apiVersion: apps/v1
kind: Deployment
metadata:
name: myproject-deployment
labels:
app: myproject-server
namespace: myproject
spec:
replicas: 1
selector:
matchLabels:
app: myproject-server
template:
metadata:
labels:
app: myproject-server
spec:
containers:
- name: server
image: tensorflow/serving:2.3.0-gpu
ports:
- containerPort: 8500
volumeMounts:
- name: azurestorage
mountPath: /models
resources:
requests:
memory: "10Gi"
cpu: "1"
limits:
memory: "12Gi"
cpu: "2"
nvidia.com/gpu: 1
args: ["--model_config_file=/models/models.config", "--monitoring_config_file=/models/monitoring.config"]
volumes:
- name: azurestorage
persistentVolumeClaim:
claimName: pvcmodels