本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
AmazonDeep Learning Containers 英特尔数学核心库 (MKL) 建议
针对 CPU 容器的 MKL 建议
CPU 实例上深度学习框架的训练和推理工作负载的性能情形不一,具体取决于各种配置设置。例如,在AmazonEC2 c5.18xlarge 实例,物理内核数为 36,而逻辑内核数为 72。MKL 的训练和推理的配置设置受这些因素影响。通过更新 MKL 的配置来匹配实例功能,则有可能实现性能改进。
请考虑以下使用 Intel-MKL 优化的 TensorFlow 二进制的示例:
-
据对一个 ResNet50v2 模型(该模型使用 TensorFlow 来训练,训练好后使用TensorFlow Serving 来推理)的观察,当 MKL 设置调整到匹配实例的内核数量时,推理性能提高 2 倍。以下设置用于 c5.18xlarge 实例。
export TENSORFLOW_INTER_OP_PARALLELISM=2 # For an EC2 c5.18xlarge instance, number of logical cores = 72 export TENSORFLOW_INTRA_OP_PARALLELISM=72 # For an EC2 c5.18xlarge instance, number of physical cores = 36 export OMP_NUM_THREADS=36 export KMP_AFFINITY='granularity=fine,verbose,compact,1,0' # For an EC2 c5.18xlarge instance, number of physical cores / 4 = 36 /4 = 9 export TENSORFLOW_SESSION_PARALLELISM=9 export KMP_BLOCKTIME=1 export KMP_SETTINGS=0
-
据对一个 ResNet50_v1.5 模型(该模型使用 TensorFlow 在 ImageNet 数据集上训练,并且使用 NHWC 图像形状)的观察,训练吞吐量性能加快了 9 倍左右。比较对象为未进行 MKL 优化的二级制,用“样本数/秒”指标来进行度量。使用以下环境变量:
export TENSORFLOW_INTER_OP_PARALLELISM=0 # For an EC2 c5.18xlarge instance, number of logical cores = 72 export TENSORFLOW_INTRA_OP_PARALLELISM=72 # For an EC2 c5.18xlarge instance, number of physical cores = 36 export OMP_NUM_THREADS=36 export KMP_AFFINITY='granularity=fine,verbose,compact,1,0' # For an EC2 c5.18xlarge instance, number of physical cores / 4 = 36 /4 = 9 export KMP_BLOCKTIME=1 export KMP_SETTINGS=0
以下链接将帮助您了解如何调整 Intel MKL 和您的深度学习框架设置,以优化深度学习工作负载:
设置环境变量的 EC2 指南
请参阅 docker run
文档,了解在创建容器时如何设置环境变量:https://docs.docker.com/engine/reference/run/#env-environment-variables
下面是为 docker run 设置称为 OMP_NUM_THREADS
的环境变量的一个示例。
ubuntu@ip-172-31-95-248:~$ docker run -e OMP_NUM_THREADS=36 -it --entrypoint "" 999999999999.dkr.ecr.us-east-1.amazonaws.com/beta-tensorflow-inference:1.13-py2-cpu-build bash root@d437faf9b684:/# echo $OMP_NUM_THREADS 36
在极少数情况下,英特尔 MKL 可能会产生不良影响。若要禁用 MKL TensorFlow 请设置以下环境变量:
export TF_DISABLE_MKL=1 export TF_DISABLE_POOL_ALLOCATOR=1
设置环境变量的 ECS 指南
要在 ECS 中为容器指定运行时环境变量,必须编辑 ECS 任务定义。在任务定义的 containerDefinitions
部分,以“名称-值”密钥对的形式添加环境变量。下面为设置 OMP_NUM_THREADS
和 KMP_BLOCKTIME
变量的示例。
{ "requiresCompatibilities": [ "EC2" ], "containerDefinitions": [{ "command": [ "mkdir -p /test && cd /test && git clone -b r1.13 https://github.com/tensorflow/serving.git && tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=saved_model_half_plus_two_cpu --model_base_path=/test/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu" ], "entryPoint": [ "sh", "-c" ], "name": "EC2TFInference", "image": "999999999999.dkr.ecr.us-east-1.amazonaws.com/tf-inference:1.12-cpu-py3-ubuntu16.04", "memory": 8111, "cpu": 256, "essential": true, "environment": [{ "name": "OMP_NUM_THREADS", "value": "36" }, { "name": "KMP_BLOCKTIME", "value": 1 } ], "portMappings": [{ "hostPort": 8500, "protocol": "tcp", "containerPort": 8500 }, { "hostPort": 8501, "protocol": "tcp", "containerPort": 8501 }, { "containerPort": 80, "protocol": "tcp" } ], "logConfiguration": { "logDriver": "awslogs", "options": { "awslogs-group": "/ecs/TFInference", "awslogs-region": "us-west-2", "awslogs-stream-prefix": "ecs", "awslogs-create-group": "true" } } }], "volumes": [], "networkMode": "bridge", "placementConstraints": [], "family": "Ec2TFInference" }
在极少数情况下,英特尔 MKL 可能会产生不良影响。若要禁用 MKL TensorFlow 请设置以下环境变量:
{ "name": "TF_DISABLE_MKL", "value": 1 }, { "name": "TF_DISABLE_POOL_ALLOCATOR", "value": 1 }
设置环境变量的 EKS 指南
要为容器指定运行时环境变量,编辑 EKS 作业(.yaml、.json)的原始清单。以下清单的代码段显示名为 squeezenet-service
的容器的定义。除了其他属性如 args 和端口外,环境变量以“名称-值”密钥对的形式列出。
containers: - name: squeezenet-service image: 999999999999.dkr.ecr.us-east-1.amazonaws.com/beta-mxnet-inference:1.4.0-py3-gpu-build command: - mxnet-model-server args: - --start - --mms-config /home/model-server/config.properties - --models squeezenet=https://s3.amazonaws.com/model-server/models/squeezenet_v1.1/squeezenet_v1.1.model ports: - name: mms containerPort: 8080 - name: mms-management containerPort: 8081 imagePullPolicy: IfNotPresent env: - name: AWS_REGION value: us-east-1 - name: OMP_NUM_THREADS value: 36 - name: TENSORFLOW_INTER_OP_PARALLELISM value: 0 - name: KMP_AFFINITY value: 'granularity=fine,verbose,compact,1,0' - name: KMP_BLOCKTIME value: 1
在极少数情况下,英特尔 MKL 可能会产生不良影响。若要禁用 MKL TensorFlow 请设置以下环境变量:
- name: TF_DISABLE_MKL value: 1 - name: TF_DISABLE_POOL_ALLOCATOR value: 1