Как обучить модель SageMaker BlazingText по нескольким каналам - PullRequest
0 голосов
/ 17 октября 2018

У меня есть два отдельных нормализованных текстовых файла, на которых я хочу обучить свою модель BlazingText.

Я изо всех сил пытаюсь заставить это работать, и документация не помогает.

В основном мне нужночтобы выяснить, как предоставить несколько файлов или префиксов S3 в качестве параметра «входных данных» для метода sagemaker.estimator.Estimator.fit ().

Сначала я попытался:

s3_train_data1 = 's3://{}/{}'.format(bucket, prefix1)
s3_train_data2 = 's3://{}/{}'.format(bucket, prefix2)

train_data1 = sagemaker.session.s3_input(s3_train_data1, distribution='FullyReplicated', content_type='text/plain', s3_data_type='S3Prefix')

train_data2 = sagemaker.session.s3_input(s3_train_data2, distribution='FullyReplicated', content_type='text/plain', s3_data_type='S3Prefix')

bt_model.fit(inputs={'train1': train_data1, 'train2': train_data2}, logs=True)

это нене работает, потому что SageMaker ищет ключ специально для "train" в параметре входных данных.

Итак, я попытался:

bt_model.fit(inputs={'train': train_data1, 'train': train_data2}, logs=True)

Это обучает модель только на втором наборе данныхи полностью игнорирует первый.

Теперь, наконец, я попытался использовать файл манифеста, используя документацию здесь: https://docs.aws.amazon.com/sagemaker/latest/dg/API_S3DataSource.html

(см. формат файла манифеста в разделе "S3Uri")

документация говорит, что формат файла манифеста - это JSON, который выглядит следующим образом:

[

{"prefix": "s3://customer_bucket/some/prefix/"},

"relative/path/to/custdata-1",

"relative/path/custdata-2"

]

Ну, я не думаю, что это в первую очередь допустимый JSON, но что я знаю, я все ещедать это вry.

Когда я пытаюсь это сделать:

s3_train_data_manifest = 'https://s3.us-east-2.amazonaws.com/bucketpath/myfilename.manifest'

train_data_merged = sagemaker.session.s3_input(s3_train_data_manifest, distribution='FullyReplicated', content_type='text/plain', s3_data_type='ManifestFile')

data_channel_merged = {'train': train_data_merged}

bt_model.fit(inputs=data_channel_merged, logs=True)

я получаю сообщение об ошибке:

ValueError: Error training blazingtext-2018-10-17-XX-XX-XX-XXX: Failed Reason: ClientError: Data download failed:Unable to parse manifest at s3://mybucketpath/myfilename.manifest - invalid format

Я попытался заменить квадратные скобки в моем файле манифеста фигурными скобками...но все же я чувствую, что в формате файла JSON отсутствует то, что документация не может правильно описать?

1 Ответ

0 голосов
/ 30 октября 2018

Вы, безусловно, можете сопоставить несколько файлов с одним и тем же префиксом, поэтому ваша первая попытка могла бы сработать до тех пор, пока вы упорядочите свои файлы в своем S3-контейнере.Например, префикс: s3://mybucket/foo/ будет соответствовать файлам s3://mybucket/foo/bar/data1.txt и s3://mybucket/foo/baz/data2.txt

Однако, если в вашем ведре есть третий файл с именем s3://mybucket/foo/qux/data3.txt, который вы не хотите, чтобы совпадение (хотя все еще совпадает с первыми двумя) не существует способа достичь этого с помощью одного префикса.В этих случаях манифест будет работать.Итак, в приведенном выше примере манифестом будет просто:

[
  {"prefix": "s3://mybucket/foo/"},
  "bar/data1.txt",
  "baz/data2.txt"
]

(и да, это действительно json - это массив, первый элемент которого является объектом с атрибутом, называемым prefix и все последующие элементы являются строками).

Пожалуйста, проверьте ваш манифест (вы его не опубликовали, поэтому я не могу этого сделать для вас) и убедитесь, что он соответствует приведенному выше синтаксису..

Если вы все еще застряли, откройте тему на форумах AWS sagemaker - https://forums.aws.amazon.com/forum.jspa?forumID=285, и после того, как вы это сделаете, мы можем настроить PM, чтобы попытаться разобраться в этом (никогда не публикуйте свой идентификатор учетной записи AWS в общедоступном форуме, таком как StackOverflow или даже в форумах AWS).

...