#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 и обновите.