Я использую AWS Lambda (NodeJS) для создания учебного задания Sagemaker и развертывания его с помощью Sagemaker Javascript SDK.
Я следую приведенным ниже документам AWS JavaScript SDK
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SageMaker.html
Я использую приведенный ниже скрипт для создания учебного задания.
Create Training Job:
=====================
let TrainingJobName = 'Training-' + curr_date_time
let TrainingImage = 'XXXXXX.dkr.ecr.us-east-1.amazonaws.com/xxxx:latest'
let S3Uri = 's3://xxx.xxxx.sagemaker/csv'
console.log(`TrainingJobName: ${TrainingJobName}`);
let params = {
AlgorithmSpecification: { /* required */
TrainingInputMode: 'File', /* required */
TrainingImage: TrainingImage
},
OutputDataConfig: { /* required */
S3OutputPath: 's3://xxx.xxxx.sagemaker/xxxx/output', /* required */
},
ResourceConfig: { /* required */
InstanceCount: 1, /* required */
InstanceType: 'ml.m4.xlarge', /* required */
VolumeSizeInGB: 1, /* required */
},
RoleArn: 'arn:aws:iam::xxxxx:role/service-role/AmazonSageMaker-ExecutionRole-xxxx', /* required */
StoppingCondition: { /* required */
MaxRuntimeInSeconds: 86400
},
TrainingJobName: TrainingJobName, /* required */
InputDataConfig: [
{
ChannelName: 'training', /* required */
DataSource: { /* required */
S3DataSource: {
S3DataType: 'S3Prefix', /* required */
S3Uri: S3Uri, /* required */
S3DataDistributionType: 'FullyReplicated'
}
},
CompressionType: null,
ContentType: '',
RecordWrapperType: null,
}
]
};
return await sagemaker.createTrainingJob(params).promise();
После того, как учебное задание создано, я запрашиваю статус задания, используя функцию sagemaker описываетTrainingJob.
Я получаю статус "InProgress"
После этого я вызываю функцию waitFor для sagemaker, чтобы дождаться завершения учебного задания, используя следующий метод:
https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/SageMaker.html#trainingJobCompletedOrStopped-waiter
let waitFor_result = await sagemaker.waitFor('trainingJobCompletedOrStopped', {TrainingJobName: training_job_name}).promise();
console.log(`waitFor_result : ${JSON.stringify(waitFor_result)}`);
Я считаю, что sagemaker waitFor создает второе учебное задание до завершения первого учебного задания и продолжает создавать последующие учебные задания с тем же именем.
Я думаю, что это связано с параметром StoppingCondition (MaxRuntimeInSeconds: 86400) в функции createTrainingJob.
Я хочу знать, существует ли какое-либо решение, которое создает одну учебную работу и возвращает результаты после завершения обучающей работы?
=============================================== ===========
Обновление:
Я следую «Планированию обучения модели SageMaker с помощью функции Lambda» https://www.youtube.com/watch?v=FJaykbAtGTM.
Я могу создать учебную работу, если я использую приведенный ниже код в своей функции лямбда-выражений.
let training_job_result = await start_model_training();
console.log(`Sagemaker training result : ${JSON.stringify(training_job_result)}`);
let training_job_arn = training_job_result["TrainingJobArn"];
let training_job_name = training_job_arn.split("/")[1];
let desc_training_job = await sagemaker.describeTrainingJob({TrainingJobName: training_job_name}).promise();
let desc_status = desc_training_job["TrainingJobStatus"];
console.log(`Training job desc_status 1 : ${JSON.stringify(desc_status)}`);
Но мне нужно подождать, пока учебное задание будет завершено, и вызвать метод развертывания sagemaker для создания / обновления конечной точки.
Если я использую приведенный ниже код, он продолжает создавать несколько учебных заданий, и лямбда-функция никогда не завершается.
let waitFor_result = await sagemaker.waitFor('trainingJobCompletedOrStopped', {TrainingJobName: training_job_name}).promise();
console.log(`waitFor_result : ${JSON.stringify(waitFor_result)}`);
desc_training_job = await sagemaker.describeTrainingJob({TrainingJobName: training_job_name}).promise();
desc_status = desc_training_job["TrainingJobStatus"];
console.log(`Training job desc_status 2 : ${JSON.stringify(desc_status)}`);
Я хочу развернуть / обновить конечную точку после завершения обучения.