Я развертываю обслуживающий образ tensorflow (tensorflow/serving:latest-gpu) с Kubernetes (GKE) с узлами GPU (K80), размещенными на GCP.
команда:
command: ["tensorflow_model_server"]
args: ["--port=8500", "--rest_api_port=8501", "--enable_batching", "--batching_parameters_file=/etc/config/batching_parameters","--model_config_file=/etc/config/model_config"]
параметры дозирования :
maxBatchSize: 4096
batchTimeoutMicros: 25000
maxEnqueuedBatches: 16
numBatchThreads: 16
Я использую --model_config_file для загрузки модели версий из корзины GCS. Обслуживание Tensorflow извлекает каждую новую версию модели и загружает ее, когда это делается, он выгружает старую (но похоже, что он хранит ее в памяти)
Когда я использую ограничение/запрос в соответствии с максимальными доступными ресурсами на хосте, модуль завершил OOMKilled, потому что разрешено использование максимальной памяти. Но когда я использую лимит/запрос, соответствующий максимальным доступным ресурсам на хосте (выделенном), похоже, что память сбрасывается, чтобы соблюдать этот максимум.
Не знаете, можем ли мы установить максимальную память на тензорный поток или сказать ему использовать ограничения памяти cgroup (используемые докером/кубернетом), пожалуйста?
Можем ли мы полностью сбросить модель старых версий, чтобы освободить память ?
Кроме того, каждый раз, когда я выполняю запрос, он увеличивает память и никогда не освобождает ее. У вас есть идеи, пожалуйста?
Информация об узле:
7 ВЦП
30 ГБ оперативной памяти
1 графический процессор K80
Размер модели: ~8Gb
ограничить/запросить память: 20Gb или 30Gb -> OOMKУбит после загрузки нескольких версий модели
Last State: Terminated
Reason: OOMKilled
Exit Code: 137
без ограничений / запрос -> Tensorflow завершается вытеснением Kubernetes из-за высокого потребления памяти.
Status: Failed
Reason: Evicted
Message: The node was low on resource: memory. Container tensorserving was using 24861136Ki, which exceeds its request of 0.
Спасибо,
С уважением
Винс

В качестве обходного пути я решил использовать другой распределитель памяти (по умолчанию malloc): tcmalloc (реализация распределения памяти Google), который решил мою проблему без проблем с производительностью.
(Это уродливый файл развертывания, но он для упрощения визуализации).
Обслуживание тензорного потока развертывания Kubernetes:
spec:
containers:
- name: tensorserving
image: tensorflow/serving:1.14.0-gpu"
command: [""]
args:
- "sh"
- "-c"
- "apt-get update && apt-get install google-perftools -y && LD_PRELOAD=/usr/lib/libtcmalloc.so.4 tensorflow_model_server --port=8500 --rest_api_port=8501 --monitoring_config_file=/etc/config/monitoring_config --enable_batching --batching_parameters_file=/etc/config/batching_parameters --model_config_file=/etc/config/model_config"
Это доступно для старых версий? Я столкнулся с той же проблемой в версиях 1.12 и 1.11.