Sagemaker ImportError:不支持按文件名导入

时间:2018-06-19 09:06:00

标签: tensorflow amazon-sagemaker

我有一个用于文本预测的自定义算法。我想在sagemaker中部署它。我正在学习本教程。 https://docs.aws.amazon.com/sagemaker/latest/dg/tf-example1.html
本教程中唯一的变化是。

from sagemaker.tensorflow import TensorFlow

iris_estimator = TensorFlow(entry_point='/home/ec2-user/SageMaker/sagemaker.py',
                        role=role,
                        output_path=model_artifacts_location,
                        code_location=custom_code_upload_location,
                        train_instance_count=1,
                        train_instance_type='ml.c4.xlarge',
                        training_steps=1000,
                        evaluation_steps=100, source_dir="./", requirements_file="requirements.txt")

%%time
import boto3

train_data_location = 's3://sagemaker-<my bucket>'

iris_estimator.fit(train_data_location)

信息:数据集位于存储桶的根目录。

错误日志

ValueError: Error training sagemaker-tensorflow-2018-06-19-07-11-13-634: Failed Reason: AlgorithmError: uncaught exception during training: Import by filename is not supported.
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/container_support/training.py", line 36, in start
    fw.train()
  File "/usr/local/lib/python2.7/dist-packages/tf_container/train_entry_point.py", line 143, in train
    customer_script = env.import_user_module()
  File "/usr/local/lib/python2.7/dist-packages/container_support/environment.py", line 101, in import_user_module
    user_module = importlib.import_module(script)
  File "/usr/lib/python2.7/importlib/__init__.py", line 37, in import_module
    __import__(name)
ImportError: Import by filename is not supported.

2 个答案:

答案 0 :(得分:1)

我解决了这个问题,问题是为Properties options = new Properties(); String bridgeAddress = "https://meek.actualdomain.com"; options.put(MeekTransport.OPTION_FRONT,"www.somefrontabledomain.com"); options.put(MeekTransport.OPTION_KEY,"18800CFE9F483596DDA6264C4D7DF7331E1E39CE"); init("meek", bridgeAddress, options); Transport transport = Dispatcher.get().getTransport(this, PT_TRANSPORTS_MEEK, options); if (transport != null) { Connection conn = transport.connect(bridgeAddress); //now use the connection, either as a proxy, or to read and write bytes directly if (conn.getLocalAddress() != null && conn.getLocalPort() != -1) setSocksProxy (conn.getLocalAddress(), conn.getLocalPort()); ByteArrayOutputStream baos = new ByteArrayOutputStream(); baos.write("GET https://somewebsite.org/TheProject.html HTTP/1.0".getBytes()); conn.write(baos.toByteArray()); byte[] buffer = new byte[1024*64]; int read = conn.read(buffer,0,buffer.length); String response = new String(buffer); } 使用了绝对路径。
当您使用entry_point参数时,source_dir的路径应相对于entry_point

答案 1 :(得分:0)

我解决了:

region = boto3.Session().region_name
train_data_location = 's3://sagemaker-<my bucket>'.format(region)