我正在使用 AWS Batch 运行一个带有几个并行运行的模块的 python 脚本(在 AWS ECR 上的 docker 容器中)。当我在 Linux 16 核机器上手动调用脚本时,我看到 16 个 python 进程并行执行代码。
为了进一步加快运行速度,我想使用 AWS Batch 通过自动缩放到 64 个内核来运行相同的脚本。但是,这种方法只是启动了一个 python 进程——这显然比我最初的方法慢。
其他详细信息:我正在运行的并行 python 方法是pairwise_distances(基于joblib库构建)我在 Windows 10 机器上构建了 docker 映像,将其推送到 ECR 并使用 AWS Batch 调用它的运行。
我是否缺少调用 python 并行后端的关键内容,或者是否有任何我未配置的 docker 配置设置。非常感谢您提前提供的帮助。
示例 Python 代码:script.py
import pandas as pd
import numpy as np
from sklearn.metrics.pairwise import pairwise_distances
X = pd.DataFrame(np.random.randint(0,100,size=(1000, 4)), columns=list('ABCD'))
Y = pd.DataFrame(np.random.randint(0,100,size=(10000, 4)), columns=list('ABCD'))
output = pd.DataFrame(
pairwise_distances(X.to_numpy(),Y.to_numpy(), metric= lambda u, v: round((np.sum( np.minimum(u,v), axis = 0)/np.sum(u,axis= 0))*100,2) , n_jobs=-1),
columns = Y.index,
index = X.index
)
pd.DataFrame.to_csv(output, 'outputData.csv', sep=',', na_rep='', index=False)
Dockerfile:
python:3.7
ADD script.py /
COPY requirements.txt /tmp/
RUN pip install -r /tmp/requirements.txt
CMD ["python", "./script.py"]
要求.txt:
pandas
numpy
sklearn
joblib