Sagemaker批量转换“ ValueError:无法将字符串转换为浮点数”

时间:2020-01-30 14:37:52

标签: scikit-learn amazon-sagemaker

我正在使用sagemaker和批处理来运行本地转换器。但是,似乎转换未调用我的自定义代码。

以下是SKlearn初始化

  $sql = INSERT INTO author ( firstname, lastname) VALUES ('Roal', 'Dahl'), ('Rasmus', 'Lerdorf'), ('Jane', 'Doe');

train.py是一个Python脚本,用于加载训练数据并将模型保存到S3

批处理转换为:

from sagemaker.sklearn.estimator import SKLearn
source_dir = 'train'
script_path = 'train.py'

sklearn = SKLearn(
    entry_point=script_path,
    train_instance_type="local_gpu",
    source_dir=source_dir,
    role=role,
    sagemaker_session=sagemaker_session)
sklearn.fit({'train': "file://test.csv"})

transformer = sklearn.transformer(instance_count=1, entry_point=source_dir+"/"+script_path, instance_type='local_gpu', strategy='MultiRecord', assemble_with='Line' ) transformer.transform("file://test_messages", content_type='text/csv', split_type='Line') print('Waiting for transform job: ' + transformer.latest_transform_job.job_name) transformer.wait() 包含一个csv,它是一个字符串列表

完整错误是

file://test_messages

似乎无法处理我的字符串。我在train.py中确实有使用TfidfVectorizer转换字符串的代码,但是该代码没有被调用

1 个答案:

答案 0 :(得分:2)

我是AWS SageMaker的工程师。感谢您提供估算器/变压器设置的详细信息以及完整的错误日志。

看着特定的错误,看来default_input_fn中的Scikit学习容器失败了。值得庆幸的是,SageMaker Scikit学习是开源的,因此我们可以直接访问源sagemaker_sklearn_container/serving.py#L56,以帮助了解其工作原理。

容器选择执行“默认”输入功能,以在发送到模型之前处理输入。显然,默认实现不适用于所需的输入格式。

类似于培训,您需要提供自定义Python代码来控制SageMaker Scikit学习如何在服务/推断模式下处理模型。如果要覆盖默认值,则需要在自定义Python代码中实现input_fn。您可以选择将其添加到train.py脚本中,或在Transformer中传递其他Python文件。

在撰写input_fnhttps://sagemaker.readthedocs.io/en/stable/using_sklearn.html#process-input

时,该文档应该是有用的

如果仍然有问题,可以分享自定义代码中的示例。