AWS Sagemaker推理端点未充分利用所有vCPU

我在Sagemaker推理端点(单实例)上部署了一个自定义模型,在进行负载测试时,我观察到CPU利用率指标达到了100%的最大值,但根据这篇文章,它应该达到#vCPU*100%。我已经通过clowdwatch日志确认推理端点并未使用所有核心。

因此,如果一个预测调用需要一秒钟来处理并给出响应,那么部署的模型只能处理每秒一个API调用,如果使用所有vCPU,这个速度本可以提高到每秒8个调用。

在AWS Sagemaker部署中是否有任何设置可以使用所有vCPU来增加并发性?

或者我们可以在部署时在inference.py文件中使用多进程Python包,以便每个调用到达默认核心,然后所有计算/预测在那个实例中任何空闲的核心上进行?


回答:

更新


至于问题在AWS Sagemaker部署中是否有任何设置可以使用所有vCPU来增加并发性?你可以使用各种设置。对于模型,你可以在config.properties中设置default_workers_per_model,在环境变量中设置TS_DEFAULT_WORKERS_PER_MODEL=$(nproc --all)。环境变量具有最高优先级。

除此之外,对于每个模型,你可以通过使用管理API来设置工人数量,但遗憾的是在sagemaker中无法通过curl访问管理API。因此,TS_DEFAULT_WORKERS_PER_MODEL是最好的选择。设置这个应该可以确保所有核心都被使用。

但如果你使用的是Docker文件,那么在入口点中,你可以设置脚本,等待模型加载并curl到它以设置工人数量

# 加载模型curl -X POST localhost:8081/models?url=model_1.mar&batch_size=8&max_batch_delay=50# 加载模型后,可以设置min_worker等curl -v -X PUT http://localhost:8081/models/model_1?min_worker=1

关于另一个问题,即日志确认未使用所有核心,我遇到了相同的问题,并认为这是日志系统的问题。请查看这个问题https://github.com/pytorch/serve/issues/782。社区本身同意,如果没有设置线程,那么默认情况下它会打印0,即使默认情况下它使用2*num_cores。

关于所有可能配置的详尽列表

# 参考:https://github.com/pytorch/serve/blob/master/docs/configuration.md# 可以通过config.properties和环境变量配置的变量# 注意:可以通过环境变量配置的变量**应该**有# "TS_"前缀# debuginference_address=http://0.0.0.0:8080management_address=http://0.0.0.0:8081metrics_address=http://0.0.0.0:8082model_store=/opt/ml/modelload_models=model_1.mar# blacklist_env_vars# default_workers_per_model# default_response_timeout# unregister_model_timeout# number_of_netty_threads# netty_client_threads# job_queue_size# number_of_gpu# async_logging# cors_allowed_origin# cors_allowed_methods# cors_allowed_headers# decode_input_request# keystore# keystore_pass# keystore_type# certificate_file# private_key_file# max_request_size# max_response_size# default_service_handler# service_envelope# model_server_home# snapshot_store# prefer_direct_buffer# allowed_urls# install_py_dep_per_model# metrics_format# enable_metrics_api# initial_worker_port# 未通过环境变量文档化或启用的配置# 当下面的变量设置为true时,环境中设置的变量具有更高的优先级。# 例如,环境变量的值覆盖命令行参数和配置文件中的属性。命令行参数的值覆盖配置文件中的值。# 当设置为false时,完全不使用环境变量# use_native_io=# io_ratio=# metric_time_interval=enable_envvars_config=true# model_snapshot=# version=

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注