Deploy to Cloud

Replicator is offered as a container that runs locally or on NVIDIA RTX equipped Amazon Web Services (AWS) instances. This cloud-based workload provides the latest RTX graphics and performance to any desktop system without requiring local NVIDIA RTX GPUs.


Deploy to cloud is in its early stages and is expected to mature in both ease of deployment as well as accessability throughout the Omniverse Platform. For now however the process is manual and the instructions are below. If you have trouble or concerns, please make your voice heard on the Omnmiverse Forums

Container Setup Options

We have the following options available.

Cloud Environment



Replicator AWS Setup Instructions

Container Deployment

This section describes how to run the Replicator container remotely.


  1. Connect to the machine via SSH or use your local terminal.

  2. Run the command below to confirm your GPU driver version (i.e., 470+).

    $ nvidia-smi
  3. Get access to the Replicator Container using your NVIDIA Developer Program credentials.

  4. Generate your NGC API Key.

  5. Use the command line to log in to NGC before pulling the Replicator container.

    $ docker login
    Username: $oauthtoken
    Password: <Your NGC API Key>
    WARNING! Your password will be stored unencrypted in /home/username/.docker/config.json.
    Configure a credential helper to remove this warning. See
    Login Succeeded
  6. Pull the Replicator container:

    $ docker pull
  7. Run the Replicator container with an interactive Bash session:


    Notice the flag “-v” in the console command below. This is to map a volume from the container to the instance. It is important, since this is where the data will be stored. For more info on volumes see this link Storage Volumes. If you don’t want to map anything you can use Docker Copy from within the container. To move data out of the instance into your machine you can use SCP.

    $ docker run --gpus all --entrypoint /bin/bash -it -v /PATH/TO/STORE/DATA/IN/INSTANCE:/_output/
  8. Within the interactive session in the container you are ready to run Omniverse Replicator. Create your own Replicator script to run, or alternately, you can use the script shown in: Running Replicator Headlessly . With the following command:

    ./ --allow-root --no-window --/omni/replicator/


    Basic text editing can be added to the container by running:
    apt-get update
    apt-get install vim

    To visualize the output data, you can utilize the following instructions detailed on programmatic visualization doc Visualizing the output folder from Basic Writer(). If you want to visualize live, we recommend putting the functions of that doc and running a jupyter notebook from the instance.

    The first time loading Replicator will take a while, less than 5 minutes, for the shaders to be cached. Subsequent runs in the container will be faster. Once closing the container you will lose the caching. To accelerate your process go to Replicator Container where we show how to store the cached shaders.


    Known Issue: Application shutdown may sometimes crash, but integrity of datasets is unaffected.

  9. Getting content into the container:

    In order to generate good synthetic data you will need access to 3D content. In this section we will show you how you can get access to content. There are three ways to get content into the container:

    For more information on the first two, please explore their instructions pages and/or enterprise support Omniverse ETS.

    For S3 bucket, here is a sample snippet of how you can bring in some content from a public s3 bucket to your script.

    import omni.replicator.core as rep
    with rep.new_layer():
        stage = omni.usd.get_context().get_stage()
        # Load in example asset from S3
        path =""
        agave = rep.create.from_usd(path)
        camera =,f_stop=4)
        render_product  = rep.create.render_product(camera, (1024, 1024))
        # Initialize and attach writer
        writer = rep.WriterRegistry.get("BasicWriter")
        writer.initialize(output_dir="_asset_test", rgb=True, bounding_box_2d_tight=True)
        with rep.trigger.on_frame(num_frames=10):
            with camera:
                rep.modify.pose(position=rep.distribution.uniform((-500, 200, -500), (500, 500, 500)), look_at=(0,0,0))
            with agave:
                rep.modify.pose(rotation=rep.distribution.uniform((-90,0, 0), (-90, 0, 0)))