Загрузка графического процессора равна нулю при выполнении пакетного преобразования в Amazon SageMaker

#amazon-web-services #amazon-sagemaker #tensorflow-serving

#amazon-веб-сервисы #amazon-sagemaker #tensorflow-обслуживание

Вопрос:

Я хочу запустить задание пакетного преобразования в AWS SageMaker. У меня есть модель классификации изображений, которую я обучил на локальном графическом процессоре. Теперь я хочу развернуть его на AWS SageMaker и делать прогнозы с помощью пакетного преобразования. Хотя задание пакетного преобразования выполняется успешно, загрузка графического процессора во время выполнения задания всегда равна нулю (однако загрузка памяти графического процессора составляет 97%). Это то, что говорит мне CloudWatch. Кроме того, работа занимает ок. 7 минут для обработки 500 изображений, я бы ожидал, что он будет работать намного быстрее, по крайней мере, при сравнении со временем, которое требуется для обработки изображений на локальном графическом процессоре.

Мой вопрос: почему графический процессор не используется во время пакетного преобразования, даже если я использую экземпляр GPU (я использую экземпляр ml.p3.2xlarge)? Я смог развернуть ту же самую модель на конечной точке и отправлять запросы. При развертывании на конечной точке вместо использования пакетного преобразования фактически используется графический процессор.

Подготовка модели

Я использую модель Keras с серверной частью TensorFlow. Я преобразовал эту модель в модель sagemaker, используя это руководство https://aws.amazon.com/blogs/machine-learning/deploy-trained-keras-or-tensorflow-models-using-amazon-sagemaker/ :

 import tensorflow as tf
from tensorflow.python.saved_model import builder
from tensorflow.python.saved_model.signature_def_utils import predict_signature_def
from tensorflow.python.saved_model import tag_constants
import tarfile
import sagemaker

# deactivate eager mode
if tf.executing_eagerly():
   tf.compat.v1.disable_eager_execution()

builder = builder.SavedModelBuilder(export_dir)

# Create prediction signature to be used by TensorFlow Serving Predict API
signature = predict_signature_def(
    inputs={"image_bytes": model.input}, outputs={"score_bytes": model.output})

with tf.compat.v1.keras.backend.get_session() as sess:
    # Save the meta graph and variables
    builder.add_meta_graph_and_variables(
        sess=sess, tags=[tag_constants.SERVING], signature_def_map={"serving_default": signature})
    builder.save()

with tarfile.open(tar_model_file, mode='w:gz') as archive:
    archive.add('export', recursive=True)

sagemaker_session = sagemaker.Session()
s3_uri = sagemaker_session.upload_data(path=tar_model_file, bucket=bucket, key_prefix=sagemaker_model_dir)
  

Пакетное преобразование

Образ контейнера, используемый для пакетного преобразования: 763104351884.dkr.ecr.eu-central-1.amazonaws.com/tensorflow-inference:2.0.0-gpu

 framework = 'tensorflow'
instance_type='ml.p3.2xlarge'
image_scope = 'inference'
tf_version = '2.0.0'
py_version = '3.6'

sagemaker_model = TensorFlowModel(model_data=MODEL_TAR_ON_S3, role=role, image_uri=tensorflow_image)

transformer = sagemaker_model.transformer(
    instance_count = 1,
    instance_type = instance_type,
    strategy='MultiRecord',
    max_concurrent_transforms=8,
    max_payload=10, # in MB
    output_path = output_data_path,
)

transformer.transform(data = input_data_path,
                      job_name = job_name,
                      content_type = 'application/json', 
                      logs=False,
                      wait=True
)
  

Выдержки из файла журнала

Загрузка модели занимает довольно много времени (несколько минут). В течение этого времени регистрируется следующее сообщение об ошибке:

2020-11-08T15:14:12.433 01:00 2020/11/08 14:14:12 [ ошибка] 14 # 14: * 3066 нет прямых восходящих потоков при подключении к восходящему потоку, клиент: 169.254.255.130, сервер: , запрос: «GET /ping HTTP/ 1.1», подзапрос: «/v1/models/my_model:предсказать», восходящий поток: «http://tfs_upstream/v1/models/my_model:predict «, хост: «169.254.255.131:8080» 2020-11-08T15:14:12.433 01:00
169.254.255.130 — — [08/ Ноябрь/2020:14:14:12 0000] » GET /ping HTTP/1.1″ 502 157 «-«»Go-http-client / 1.1» 2020-11-08T15:14:12.433 01:00
2020/11/08 14:14:12 [ ошибка] 14 #14: * 3066 js: сбой пинга #015 2020-11-08T15:14:12.433 01:00 502 Плохой шлюз #015 2020-11-08T15:14:12.433 01:00

#015 2020-11-08T15:14:12.433 01:00

502 Плохой шлюз

#015 2020-11-08T15:14:12.433 01:00


nginx / 1.16.1#015 2020-11-08T15:14:12.433 01:00 #015 2020-11- 08T15:14:12.433 01:00 #015

Была прочитана запись в журнале о NUMA node:

успешное чтение узла NUMA из SysFS имело отрицательное значение (-1), но должен быть хотя бы один узел NUMA, поэтому возврат нулевого узла NUMA

И о подаче запроса на прогрев:

Файл данных прогрева не найден в /opt/ml/model/export/my_model/1/assets.extra/tf_serving_warmup_requests

И это предупреждение:

[предупреждение] getaddrinfo: семейство адресов для nodename не поддерживается

Комментарии:

1. Пожалуйста, предоставьте некоторую информацию об инструментах, которые вы используете для мониторинга использования графического процессора. Пожалуйста, проверьте с помощью Cloudwatch или NVIDIA System Management Interface и обновите.