Carry legacy machine studying code into Amazon SageMaker utilizing AWS Step Capabilities

Tens of 1000’s of AWS prospects use AWS machine studying (ML) companies to speed up their ML growth with totally managed infrastructure and instruments. For purchasers who’ve been creating ML fashions on premises, equivalent to their native desktop, they need to migrate their legacy ML fashions to the AWS Cloud to completely reap the benefits of essentially the most complete set of ML companies, infrastructure, and implementation sources obtainable on AWS.

The time period legacy code refers to code that was developed to be manually run on a neighborhood desktop, and isn’t constructed with cloud-ready SDKs such because the AWS SDK for Python (Boto3) or Amazon SageMaker Python SDK. In different phrases, these legacy codes aren’t optimized for cloud deployment. The most effective apply for migration is to refactor these legacy codes utilizing the Amazon SageMaker API or the SageMaker Python SDK. Nonetheless, in some instances, organizations with a lot of legacy fashions could not have the time or sources to rewrite all these fashions.

On this put up, we share a scalable and easy-to-implement strategy emigrate legacy ML code to the AWS Cloud for inference utilizing Amazon SageMaker and AWS Step Functions, with a minimal quantity of code refactoring required. You possibly can simply lengthen this resolution so as to add extra performance. We display how two completely different personas, an information scientist and an MLOps engineer, can collaborate to elevate and shift a whole bunch of legacy fashions.

Answer overview

On this framework, we run the legacy code in a container as a SageMaker Processing job. SageMaker runs the legacy script inside a processing container. The processing container picture can both be a SageMaker built-in picture or a customized picture. The underlying infrastructure for a Processing job is totally managed by SageMaker. No change to the legacy code is required. Familiarity with creating SageMaker Processing jobs is all that’s required.

We assume the involvement of two personas: an information scientist and an MLOps engineer. The info scientist is liable for transferring the code into SageMaker, both manually or by cloning it from a code repository equivalent to AWS CodeCommit. Amazon SageMaker Studio supplies an built-in growth surroundings (IDE) for implementing varied steps within the ML lifecycle, and the info scientist makes use of it to manually construct a customized container that comprises the required code artifacts for deployment. The container shall be registered in a container registry equivalent to Amazon Elastic Container Registry (Amazon ECR) for deployment functions.

The MLOps engineer takes possession of constructing a Step Capabilities workflow that we are able to reuse to deploy the customized container developed by the info scientist with the suitable parameters. The Step Capabilities workflow might be as modular as wanted to suit the use case, or it may possibly encompass only one step to provoke a single course of. To attenuate the trouble required emigrate the code, we now have recognized three modular elements to construct a completely purposeful deployment course of:

  • Preprocessing
  • Inference
  • Postprocessing

The next diagram illustrates our resolution structure and workflow.

The next steps are concerned on this resolution:

  1. The info scientist persona makes use of Studio to import legacy code via cloning from a code repository, after which modularizing the code into separate elements that observe the steps of the ML lifecycle (preprocessing, inference, and postprocessing).
  2. The info scientist makes use of Studio, and particularly the Studio Image Build CLI instrument offered by SageMaker, to construct a Docker picture. This CLI instrument permits the info scientist to construct the picture straight inside Studio and mechanically registers the picture into Amazon ECR.
  3. The MLOps engineer makes use of the registered container picture and creates a deployment for a particular use case utilizing Step Capabilities. Step Capabilities is a serverless workflow service that may management SageMaker APIs straight via using the Amazon States Language.

SageMaker Processing job

Let’s perceive how a SageMaker Processing job runs. The next diagram exhibits how SageMaker spins up a Processing job.

SageMaker takes your script, copies your information from Amazon Simple Storage Service (Amazon S3), after which pulls a processing container. The processing container picture can both be a SageMaker built-in picture or a customized picture that you simply present. The underlying infrastructure for a Processing job is totally managed by SageMaker. Cluster sources are provisioned at some stage in your job, and cleaned up when a job is full. The output of the Processing job is saved within the S3 bucket you specified. To study extra about constructing your individual container, check with Build Your Own Processing Container (Advanced Scenario).

The SageMaker Processing job units up your processing picture utilizing a Docker container entrypoint script. It’s also possible to present your individual customized entrypoint by utilizing the ContainerEntrypoint and ContainerArguments parameters of the AppSpecification API. In case you use your individual customized entrypoint, you will have the added flexibility to run it as a standalone script with out rebuilding your pictures.

For this instance, we assemble a customized container and use a SageMaker Processing job for inference. Preprocessing and postprocessing jobs make the most of the script mode with a pre-built scikit-learn container.


To observe alongside this put up, full the next prerequisite steps:

  1. Create a Studio area. For directions, check with Onboard to Amazon SageMaker Domain Using Quick setup.
  2. Create an S3 bucket.
  3. Clone the offered GitHub repo into Studio.

The GitHub repo is organized into completely different folders that correspond to numerous phases within the ML lifecycle, facilitating simple navigation and administration:

Migrate the legacy code

On this step, we act as the info scientist liable for migrating the legacy code.

We start by opening the build_and_push.ipynb pocket book.

The preliminary cell within the pocket book guides you in putting in the Studio Image Build CLI. This CLI simplifies the setup course of by mechanically making a reusable construct surroundings you can work together with via high-level instructions. With the CLI, constructing a picture is as simple as telling it to construct, and the outcome shall be a hyperlink to the placement of your picture in Amazon ECR. This strategy eliminates the necessity to handle the complicated underlying workflow orchestrated by the CLI, streamlining the picture constructing course of.

Earlier than we run the construct command, it’s essential to make sure that the position working the command has the required permissions, as specified within the CLI GitHub readme or related post. Failing to grant the required permissions can lead to errors in the course of the construct course of.

See the next code:

#Set up sagemaker_studio_image_build utility
import sys
!{sys.executable} -m pip set up sagemaker_studio_image_build

To streamline your legacy code, divide it into three distinct Python scripts named,, and Adhere to greatest programming practices by changing the code into capabilities which might be referred to as from a principal operate. Make sure that all essential libraries are imported and the necessities.txt file is up to date to incorporate any customized libraries.

After you set up the code, package deal it together with the necessities file right into a Docker container. You possibly can simply construct the container from inside Studio utilizing the next command:

By default, the picture shall be pushed to an ECR repository referred to as sagemakerstudio with the tag newest. Moreover, the execution position of the Studio app shall be utilized, together with the default SageMaker Python SDK S3 bucket. Nonetheless, these settings might be simply altered utilizing the suitable CLI choices. See the next code:

sm-docker construct . --repository mynewrepo:1.0 --role SampleDockerBuildRole --bucket sagemaker-us-east-1-0123456789999 --vpc-id vpc-0c70e76ef1c603b94 --subnet-ids subnet-0d984f080338960bb,subnet-0ac3e96808c8092f2 --security-group-ids sg-0d31b4042f2902cd0

Now that the container has been constructed and registered in an ECR repository, it’s time to dive deeper into how we are able to use it to run We additionally present you the method of utilizing a pre-built scikit-learn container to run and

Productionize the container

On this step, we act because the MLOps engineer who productionizes the container constructed within the earlier step.

We use Step Capabilities to orchestrate the workflow. Step Capabilities permits for distinctive flexibility in integrating a various vary of companies into the workflow, accommodating any current dependencies that will exist within the legacy system. This strategy ensures that each one essential elements are seamlessly built-in and run within the desired sequence, leading to an environment friendly and efficient workflow resolution.

Step Capabilities can management sure AWS companies straight from the Amazon States Language. To study extra about working with Step Capabilities and its integration with SageMaker, check with Manage SageMaker with Step Functions. Utilizing the Step Capabilities integration functionality with SageMaker, we run the preprocessing and postprocessing scripts utilizing a SageMaker Processing job in script mode and run inference as a SageMaker Processing job utilizing a custom container. We accomplish that utilizing AWS SDK for Python (Boto3) CreateProcessingJob API calls.


SageMaker presents a number of choices for working customized code. In case you solely have a script with none customized dependencies, you may run the script as a Carry Your Personal Script (BYOS). To do that, merely move your script to the pre-built scikit-learn framework container and run a SageMaker Processing job in script mode utilizing the ContainerArguments and ContainerEntrypoint parameters within the AppSpecification API. It is a simple and handy technique for working easy scripts.

Try the “Preprocessing Script Mode” state configuration within the sample Step Functions workflow to know how you can configure the CreateProcessingJob API name to run a customized script.


You possibly can run a customized container utilizing the Build Your Own Processing Container strategy. The SageMaker Processing job operates with the /decide/ml native path, and you may specify your ProcessingInputs and their native path within the configuration. The Processing job then copies the artifacts to the native container and begins the job. After the job is full, it copies the artifacts specified within the native path of the ProcessingOutputs to its specified exterior location.

Try the “Inference Customized Container” state configuration within the sample Step Functions workflow to know how you can configure the CreateProcessingJob API name to run a customized container.


You possibly can run a postprocessing script identical to a preprocessing script utilizing the Step Capabilities CreateProcessingJob step. Working a postprocessing script means that you can carry out customized processing duties after the inference job is full.

Create the Step Capabilities workflow

For shortly prototyping, we use the Step Capabilities Amazon States Language. You possibly can edit the Step Capabilities definition straight by utilizing the States Language. Discuss with the sample Step Functions workflow.

You possibly can create a brand new Step Capabilities state machine on the Step Capabilities console by deciding on Write your workflow in code.

Step Capabilities can have a look at the sources you employ and create a job. Nonetheless, you might even see the next message:

“Step Capabilities can not generate an IAM coverage if the RoleArn for SageMaker is from a Path. Hardcode the SageMaker RoleArn in your state machine definition, or select an current position with the right permissions for Step Capabilities to name SageMaker.”

To deal with this, it’s essential to create an AWS Identity and Access Management (IAM) position for Step Capabilities. For directions, check with Creating an IAM role for your state machine. Then connect the next IAM coverage to supply the required permissions for working the workflow:

    "Model": "2012-10-17",
    "Assertion": [
            "Effect": "Allow",
            "Action": [
            "Useful resource": "*"
            "Impact": "Enable",
            "Motion": [
            "Useful resource": "*",
            "Situation": {
                "StringEquals": {
                    "iam:PassedToService": ""

The next determine illustrates the movement of knowledge and container pictures into every step of the Step Capabilities workflow.

The next is a listing of minimal required parameters to initialize in Step Capabilities; you can even check with the sample input parameters JSON:

  • input_uri – The S3 URI for the enter recordsdata
  • output_uri – The S3 URI for the output recordsdata
  • code_uri – The S3 URI for script recordsdata
  • custom_image_uri – The container URI for the customized container you will have constructed
  • scikit_image_uri – The container URI for the pre-built scikit-learn framework
  • position – The execution position to run the job
  • instance_type – The occasion sort you could use to run the container
  • volume_size – The storage quantity measurement you require for the container
  • max_runtime – The utmost runtime for the container, with a default worth of 1 hour

Run the workflow

We’ve damaged down the legacy code into manageable elements: preprocessing, inference, and postprocessing. To help our inference wants, we constructed a customized container geared up with the required library dependencies. Our plan is to make the most of Step Capabilities, making the most of its capacity to name the SageMaker API. We’ve proven two strategies for working customized code utilizing the SageMaker API: a SageMaker Processing job that makes use of a pre-built picture and takes a customized script at runtime, and a SageMaker Processing job that makes use of a customized container, which is packaged with the required artifacts to run customized inference.

The next determine exhibits the run of the Step Capabilities workflow.


On this put up, we mentioned the method of migrating legacy ML Python code from native growth environments and implementing a standardized MLOps process. With this strategy, you may effortlessly switch a whole bunch of fashions and incorporate your required enterprise deployment practices. We introduced two completely different strategies for working customized code on SageMaker, and you may choose the one which most accurately fits your wants.

In case you require a extremely customizable resolution, it’s really useful to make use of the customized container strategy. It’s possible you’ll discover it extra appropriate to make use of pre-built pictures to run your customized script when you’ve got fundamental scripts and don’t have to create your customized container, as described within the preprocessing step talked about earlier. Moreover, if required, you may apply this resolution to containerize legacy mannequin coaching and analysis steps, identical to how the inference step is containerized on this put up.

In regards to the Authors

Bhavana Chirumamilla is a Senior Resident Architect at AWS with a robust ardour for information and machine studying operations. She brings a wealth of expertise and enthusiasm to assist enterprises construct efficient information and ML methods. In her spare time, Bhavana enjoys spending time together with her household and interesting in varied actions equivalent to touring, mountaineering, gardening, and watching documentaries.

Shyam Namavaram is a senior synthetic intelligence (AI) and machine studying (ML) specialist options architect at Amazon Net Companies (AWS). He passionately works with prospects to speed up their AI and ML adoption by offering technical steerage and serving to them innovate and construct safe cloud options on AWS. He focuses on AI and ML, containers, and analytics applied sciences. Exterior of labor, he loves enjoying sports activities and experiencing nature with trekking.

Qingwei Li is a Machine Studying Specialist at Amazon Net Companies. He acquired his PhD in Operations Analysis after he broke his advisor’s analysis grant account and didn’t ship the Nobel Prize he promised. Presently, he helps prospects within the monetary service and insurance coverage business construct machine studying options on AWS. In his spare time, he likes studying and instructing.

Srinivasa Shaik is a Options Architect at AWS primarily based in Boston. He helps enterprise prospects speed up their journey to the cloud. He’s obsessed with containers and machine studying applied sciences. In his spare time, he enjoys spending time along with his household, cooking, and touring.

Leave a Reply

Your email address will not be published. Required fields are marked *