tensorflow 使用Apple M1 Pro实现本地调试/培训的AWS SageMaker-Python-SDK的正确配置是什么

ldioqlga  于 2022-11-16  发布在  Python
关注(0)|答案(1)|浏览(152)

我想在AWS SageMaker上运行一个RL培训任务(脚本如下)。但由于项目很复杂,我希望在提交到付费示例之前使用SageMaker本地模式(在我的M1 MacBook Pro中)进行一次测试运行。然而,即使是一个简单的培训任务,我也很难使这个本地运行成功。
现在,我确实在运行本地培训作业时使用了Tensorflow-metal和Tensorflow-macos(没有SageMaker)。我没有看到任何地方可以在framework_version中指定这一点,也没有看到我确定"local_gpu"是带GPU的普通Linux机器的正确参数,完全匹配Apple Silicon(M1 Pro)。
我找遍了所有的地方,但我找不到一个案例,这是解决。(很奇怪,我做错了什么?如果是这样,请纠正我。)如果没有,并有任何人谁知道一个配置,一个码头图像或一个例子正确地做了M1专业请分享。
我尝试运行以下代码。登录后挂起。(如果您尝试运行该代码,请尝试使用任何简单的培训脚本作为entry_point,并确保使用awscli和以下命令以与您所在地区匹配的类似代码登录。aws ecr get-login-password --region us-east-1 | docker login --username AWS --password-stdin 763104351884.dkr.ecr.us-east-1.amazonaws.com

##main.py
import boto3
import sagemaker
import os
import keras
import numpy as np
from keras.datasets import fashion_mnist
from sagemaker.tensorflow import TensorFlow

sess = sagemaker.Session() 
#role = <'arn:aws:iam::0000000000000:role/CFN-SM-IM-Lambda-Catalog-sk-SageMakerExecutionRole-BlaBlaBla'> #KINDLY ADD YOUR ROLE HERE

(x_train, y_train), (x_val, y_val) = fashion_mnist.load_data()

os.makedirs("./data", exist_ok = True)

np.savez('./data/training', image=x_train, label=y_train)
np.savez('./data/validation', image=x_val, label=y_val)

# Train on local data. S3 URIs would work too.
training_input_path   = 'file://data/training.npz'
validation_input_path = 'file://data/validation.npz'

# Store model locally. A S3 URI would work too.
output_path           = 'file:///tmp/model/'

tf_estimator = TensorFlow(entry_point='mnist_keras_tf.py',
                          role=role,
                          instance_count=1, 
                          instance_type='local_gpu',   # Train on the local CPU ('local_gpu' if it has a GPU)
                          framework_version='2.1.0',
                          py_version='py3',
                          hyperparameters={'epochs': 1},
                          output_path=output_path
                         )

tf_estimator.fit({'training': training_input_path, 'validation': validation_input_path})
ix0qys7i

ix0qys7i1#

prebuilt SageMaker Docker Images for Deep Learning还没有基于Arm的支持。您可以查看可用的深度学习容器图片here
解决方案是构建您自己的Docker映像并将其与SageMaker一起使用。
这是使用miniconda安装TensorFlow依赖项的Dockerfile示例:

FROM arm64v8/ubuntu

RUN apt-get -y update && apt-get install -y --no-install-recommends \
         wget \
         nginx \
         ca-certificates \
         gcc \
         linux-headers-generic \
         libc-dev

RUN wget https://repo.anaconda.com/miniconda/Miniconda3-py38_4.9.2-Linux-aarch64.sh
RUN chmod a+x Miniconda3-py38_4.9.2-Linux-aarch64.sh
RUN bash Miniconda3-py38_4.9.2-Linux-aarch64.sh -b
ENV PATH /root/miniconda3/bin/:$PATH

COPY ml-dependencies.yml ./
RUN conda env create -f ml-dependencies.yml

ENV PATH /root/miniconda3/envs/ml-dependencies/bin:$PATH

这就是ml-dependencies.yml

name: ml-dependencies
dependencies:
  - python=3.8
  - numpy
  - pandas
  - scikit-learn
  - tensorflow==2.8.2
  - pip
  - pip:
    - sagemaker-training

下面是使用SageMaker脚本模式运行培训的方法:

image = 'sagemaker-tensorflow2-graviton-training-toolkit-local'

    california_housing_estimator = Estimator(
        image_uri=image,
        entry_point='california_housing_tf2.py',
        source_dir='code',
        role=DUMMY_IAM_ROLE,
        instance_count=1,
        instance_type='local',
        hyperparameters={'epochs': 10,
                         'batch_size': 64,
                         'learning_rate': 0.1})

    inputs = {'train': 'file://./data/train', 'test': 'file://./data/test'}
    california_housing_estimator.fit(inputs, logs=True)

您可以在Amazon SageMaker Local Mode Examples GitHub存储库here中找到完整的工作示例代码。

相关问题