For the complete documentation index, see llms.txt. This page is also available as Markdown.

Creating and Running Interactive Container Code

Explains how to create and run code in an interactive container.

What is an Interactive Container Code Object?

Interactive Container Code lets you run pre-built container images with interactive apps or graphical interfaces. You can use tools like Jupyter Notebooks directly on your on-premises data while keeping that data secure.

Key Attributes of Interactive Container Code

  • Interactive GUIs: Unlike other Code Objects, Interactive Containers enable you to execute containers with interactive graphical user interfaces. This facilitates real-time interaction and data visualization within the FCP environment.

  • On-Premises Interaction: Interactive Containers offer the capability to interact with on-premises data while leveraging the computational power of the FCP. This integration is particularly useful for scenarios where data remains within internal networks.

  • Third-Party Applications: With Interactive Container Code Objects, you can run third-party applications that are containerized and can be executed within the FCP ecosystem, with no need to install them at each site.

NOTE: This capability is limited to third-party applications that can run within a single Linux-based container with no internet connectivity.

Use Cases of Interactive Containers

  • Real-Time Data Exploration: Utilize interactive visualizations and tools to explore and analyze on-premises healthcare data within the FCP ecosystem.

  • Third-Party Applications: Run containerized third-party applications such as medical image annotation tools or specialized analysis software.

  • Collaborative Workshops: Conduct collaborative workshops or training sessions that involve hands-on exercises and interactive activities.

Benefits of Interactive Containers

  • Interactive Experience: Gain the ability to interact with GUIs and applications in real-time, fostering dynamic exploration of your data.

  • On-Premises Compatibility: Execute containerized applications on your on-premises data while utilizing the computational resources of the FCP.

  • Secure Collaboration: Enable secure collaboration by running third-party tools and applications within the FCP environment, ensuring data privacy.

Summary

In summary, Interactive Containers offer an innovative pathway to engage with interactive graphical interfaces and applications within the Rhino FCP. By merging on-premises data with containerized interactivity, you can delve deeper into data exploration, collaboration, and visualization while maintaining the highest levels of security and privacy.

Creating New Interactive Container Code

1

Go to the main project's page and select your project.

2

Select Code from the menu on the left to open the Code Objects page.

3

Select the Create New Code Object button to open the Create New Code Object page.

4

Select the Interactive Container as the Code Object Type.

The page changes to show the fields needed for this object type.

5

Enter information in the following fields.

Before you enter information in the fields (see table below), read the following about input and outputs

Code objects usually require that you know the number of inputs and outputs your code needs. Those inputs and outputs are provided as data schemas. For example, if your code splits one dataset into two (like a train/test split), you will have to create a code object with one input schema and two output schemas. For more detail into how to structure your code to run on FCP, see Accessing your datasets in Code Objects.

Multiple input and output datasets are supported in Python, Generalized, and Interactive Container Code Objects. While NVFlare Code Objects do not support multiple datasets, they can still be used as before for learning and inference across multiple sites.

NOTE: If you don't need this level of control, you can:

  • Set any input or output as optional, which will allow to provide or generate no datasets respectively

  • Set any input or output as a list, which will allow to select 1 or more datasets

  • Select "ANY" as input schema, which will allow code object re-use across any input dataset schema.

  • Let the system automatically determine the output schemas with Auto-Generated Data Schemas.

Field/Button
Description

Name

Indicates the name you want to provide for the code object.

Description

Provides a brief summary of what the code object does.

Input (including three-dot menu items)

Indicates the file(s) needed for the code object to run properly. Your selection here will affect which Dataset(s) can be selected as input when triggering a Code Run with this Code Object. You can enter one or more input files, such as schemas, configuration files, or others. File(s) can be in DICOM, JSON, and or text formats. - If your input doesn't require a schema, select Any. - Select the Add button to the right of the input entry to add another input. You can add as many as you like. - If your input includes more than a single dataset, select the three dot menu to the right of the Input field, then select Input is a list. - If the input is optional, select the three-dot menu to the right of the Input field, then select Optional Input.

Output

Indicates the output file(s) produced when the code object run. You can enter one or more output files. Files can be in DICOM, JSON, and or text formats. - You can also select the option to [ Auto-generate Data Schema from Data ]. For more information about Auto-generating Data Schemas, please refer to Auto-Generated Data Schemas. - Select the Add button to the right of the output entry to add another output. You can add as many as you like. - If your output includes more than a single dataset, select the three dot menu to the right of the Output field, then select Output is a list. - If the output is optional, select the three-dot menu to the right of the Output field, then select Optional Output.

Container

Specifies the name of the Docker container you would like to execute when running this Code Object. This will either be a container image created by someone from your workgroup that is available on your ECR or an image provided by Rhino. If you need a refresher on pushing containers to your ECR, please refer to Pushing Containers to the ECR.

6

After you've completed your details, you can choose to set required compute resources.

If you want to do this, see Setting Required Compute Resources (Autoscaling).

7

Select the Create New Code button to create the new Code Object.

8

The Code Object appears in the Code Object page.

When you have completed adding all your Interactive Container Code details, click the Create New Code button to create your new Code Object.

Setting Required Compute Resources (Autoscaling)

NOTE: This feature is only available if you are running on the Google Cloud Platform (GCP). For NVFlare code objects and code runs, you can adjust autoscaling methods for both the NVFlare Server and the NVFlare Client. For the NVFlare Server, you can only specify the CPU and RAM.

Autoscaling allows Rhino to run Code Runs on additional compute resources when the default Rhino Client capacity is not sufficient. This capability is designed to support resource‑intensive, "bursty"(processing tasks occur in short, intense or irregular spurts), or GPU‑based workloads while improving isolation, reliability, and cost efficiency. With autoscaling enabled, Rhino provisions temporary cloud VMs on demand, executes workloads on those VMs, and automatically terminates them when execution completes. This can help you make more efficient use of your computing resources and save on costs.

In this section of the screen there are three options: Use Client Resources, Set Minimum, and Use VM Pool.

  • Use Client Resources - Uses the available client settings and resources.

  • Set Minimum - Allows you to set the minimum number of resources that must be available. If you choose the Set Minimum option, you can indicate the minimum number of CPUs, amount of RAM, the disk size (VRAM), as well as the type and number of GPUs. You can adjust these settings when you create a code object and also when you run your code. Note that adjustments do not persist and will need to be reset with each run.

  • Use VM Pool - Allows you to select a Pre-allocated Virtual Machine (VM) Pool. Pre-allocated VM Pools allow you to indicate which dedicated compute resource you want to use for your code run, ensuring guaranteed availability for high-demand workloads such as GPU-intensive AI training and inference. This feature provides availability of critical compute resources and offers predictable costs through fixed capacity reservations.

NOTE: Pre-allocated VMs must be configured by an administrator before use. Pre-Allocated VM Pools are available for any code object that will run on the Google Cloud Platform (GCP) Rhino-hosted agents. It is also available for Generalized Compute and NVFlare Code Objects. For Generalized Compute, each agent claims its slot independently. For NVFlare, there is a two-phase claim: all agents must secure pending slots before any job dispatches.

Each option is detailed below.

Use Client Resources

To use client resources, complete the following steps.

  1. Select the Use Client Resources button. It should be selected by default.

  2. When complete, select Create New Code Object or start a Code Run.

Set Minimum

To set the minimum required compute resources, complete the following steps.

  1. In the Required Compute Resources section, select Set Minimum.

  2. Next, make changes to the settings as needed. Note that these setting changes do not persist the next time you run the code object or code run. The settings are explained below.

Setting

Description

Usage Notes

CPU MIN

The minimum number of CPU cores on which your code will be run.

If the CPU MIN is too low, you might see slow code execution or throttling.

RAM MIN

The minimum amount of RAM (main memory) that you want to allocate to running your code.

If this is too low, you might see an out-of-memory crash or slowness in execution due to disk swapping.

DISK SIZE

Amount of storage allocated to the instance.

Increasing this setting increases capacity (not necessarily speed)

GPU TYPE

The model of GPU hardware. The number of GPUs indicate the number of GPUs attached to the instance.

If your code isn’t written to use multiple GPUs, extra GPUs might not be used. Note that GPU availability depends on the selected cloud region, Project‑level GPU quotas, and the current capacity at the cloud provider.

Use VM Pool

You can select a VM pool to indicate which dedicated compute resource you want to use for your code run, ensuring guaranteed availability for high-demand workloads such as GPU-intensive AI training and inference. This feature provides faster job startup times and offers predictable costs through fixed capacity reservations. To select a VM Pool, complete the following steps.

NOTE: When a VM pool is selected, you cannot manually set individual compute resource specifications (CPU, RAM, GPU), because these are governed by the pool's fixed configuration. Also note that system validation will prevent the creation of a Code Object if the requirements do not match the selected pool’s capabilities (e.g., requesting a non-GPU job on a GPU-only pool).

  1. Choose Use VM Pool to see the available pools. For each pool you will see a name, as well as the current resources available. For each pool you will see the following information.

  • Number of VMs (if any)

  • Number of vCPUs per VM

  • Amount of RAM per VM

  • Disk size per VM

  • Whether there are GPUs available, and how many and their specifications

If you don't know which VM Pool to choose, see Learning More About Available VM Pools.

  1. Select the pool of your choice.

  2. When complete, select Create New Code Object or start a Code Run. The new code object (or code run) has an icon that indicates that the code object will run on a pre-allocated VM pool. If you hover over the icon, the name of the selected VM pool is shown.

VM Pool Statuses and Capacity

This section explains how to track VM Pool statuses across your project. It also provides information on VM Pool job execution and on what happens when a VM Pool capacity has been exhausted.

Tracking VM Pool Statuses

You can track the performance, health, and availability of your VM Pool project resources in the VM Pools Tab. This dedicated subpage provides a comprehensive view of your environment, including total pool capacity, current utilization (number of running VMs), and queue length.

To learn more about the status of the VM Pools are available in your project, do the following.

  1. Select Code from the main menu, then select the Virtual Machine Pools tab at the top of the page.

  1. Review the information about the pools.

  • Total Pools - Number of VM Pools available across the project.

  • Total Capacity - Number of VMs, including how many are in use and how many are idle.

  • Queued Jobs - Number of jobs waiting for processing across all pools.

  • Health - How many VM pools are active, as well as a brief description of the inactive VM Pools.

  • Running Jobs - There is also a listing that contains pool information for running jobs. This includes the pool name, compute specs (number of CPUs, amount of ram, GPUs), utilization, how many jobs are in the queue, and the status of the job.

NOTE: If a pool undergoes maintenance, a banner will appear on the Code Run page indicating that jobs will remain queued until the maintenance is complete.

VM Pool Job Execution and VM Pool Capacity Exhaustion When a job is triggered against a pre-allocated pool, it follows a more efficient execution path compared to standard auto-scaling. Jobs are submitted to the chosen pool and transition rapidly from a "Queued" phase directly into a "Running" state as resources are already primed for use.

If a pool's capacity is exhausted, jobs are placed into a First-in-First-Out (FIFO) queue rather than failing. You can monitor the "Queued (VM Pool)" status and your job's position on the Code Run page. Once a slot frees, the job is automatically assigned and dispatched.

Viewing a Code Object's Configuration

To get an object's configuration, make sure you are on the page containing the original object you would like to view the configuration of. In the box where your original object is, there should be a row for each version. Navigate to the version you would like to view the configuration for and select the three-dot menu button, shown below:

The menu button is on the right-hand side of the row, click it to view a new menu. The new menu should have an option to show that object's configuration, click on that to see the object's configuration.

For Code Objects and Code Runs, if you chose the Use VM Pool option, you will use the pool that was indicated during the Code Object or Code Run configurations. Selecting this option shows the resources, including the number of VMs and vCPUs that will be allocated, as well as the amount of RAM, the size of the disk, the number of GPUs, the GPU type/model, and the amount of VRAM.

Creating a New Interactive Container Code Version

  1. Go to the page that has the original object you want to create a new version of.

  2. In the upper right corner of the box where your original object is, select the + New Version button.

  3. A new window appears that allows you to create a new version of your object.

Removing a Code Object

To remove a code object, complete the following steps.

1

Open the Code Objects page

Go to the page that lists your code objects.

2

Find the code object version

If needed, use the search fields at the top right.

  • Use Search Name to search by code object name.

  • Use Search Description to search by code object description.

Each code object appears with a row for each version. Find the version you want to delete.

3

Open the menu for the version

Select the three-dot menu on the right side of the version row, shown below.

4

Remove the code object version

Select Remove code object.

Repeat these steps for each version you want to remove. When you delete the last version, the code object is fully deleted.

To run interactive container code, you'll need to go to the Code Objects page, then fill out the run details.

Running Interactive Container Code

After you have created a Interactive Container code object, do the following to run the interactive container code.

1

Go to the main project's page and select your project.

2

Select Code from the menu on the left to open the Code Objects page.

3

Select the Run button for the code object you'd like to run.

4

In the Code Object Interactive Settings page, specify the Input Dataset(s).

This is one or more Datasets to be used as input to your Code Run. If multiple Datasets are selected, each will be run separately. If a Dataset happens to be a collaborator's Dataset, the code will be run on that collaborator's Rhino Client. In other words, the data never moves outside your collaborator's Rhino Client.

Interactive containers require Secure Access to be enabled on the input dataset. For more information about Secure Access, please refer to What is Secure Access?

5

Add the Output Dataset Template.

Indicate the output dataset template for the session.

6

Add a Description Add a description for the interactive session.

7

Indicate the Timeout in Seconds. The number of seconds that must elapse before a Code Run is automatically killed. This is to avoid zombie tasks that run perpetually within a Rhino client.

8

Specify the Run Parameters (Optional).

Here you can paste a JSON object that defines additional parameters to be provided to your Code Run. This can be used for specifying hyper-parameters for model validation or any parameter provided to the code. Run parameters are made available to the container code in a file located at /input/run_params.json.

9

Specify Run Secrets (Optional).

Here you can paste a JSON object that defines the run secret; it is optional.

10

Include runtime files and extra data (Optional).

Files that you want to run at run-time should be uploaded to the Rhino Orchestrator.

Select the runtime files that you would like to include in the run. To add run time files to your code run, select the run time files from the list of the workgroup run files that appears. You will want to only include the ones you need for the code run, like in the example that follows. For more information on this, see Selecting Run Time Files during Code Run Setups. When complete, add the metadata in the Extra Data section if needed.

Selecting Run Time Files During Code Run Set Ups

If you are part of a workgroup that has collaborators, you will be able to see files that are 1) in your active workgroup that are part of the project, whether they are published or not and 2) from a collaborator’s workgroup that are part of the project only if they are published.

To better understand this, let's take a look at the following scenario. Project PRIME is led by workgroup Alpha. Workgroup Beta has been added as a collaborator. Each workgroup has uploaded run time files.

  • If YOUR active workgroup is Alpha, here is what you see when you open the Run Time Files screen in Project PRIME.

    • All Workgroup Alpha's files are shown. This is because Project PRIME is led by workgroup Alpha, so all of workgroup Alpha’s files that are part of the project are shown whether they are published or not.

    • Only Workgroup Beta’s published files are shown. Workgroup Beta’s files that are not part of the project or that are unpublished are not shown.

  • If YOUR active workgroup is Beta, here is what happens when you open the Run Time Files screen in Project PRIME.

    • Workgroup Beta's files are all shown. This is because Beta members can see their own workgroup’s files that are part of the project, whether there are published or not.

    • Only Workgroup Alpha’s files that have been published to PRIME are shown. Workgroup Alpha’s unpublished files that are not part of the project are not shown.

See Managing Run Time Files to learn how to manage, publish and unpublish run time files.

When you have completed adding all your Code Run details, either set the required compute resources by following the instruction in Setting Required Compute Resources (Autoscaling), or click the Run button to run your code.

Reviewing Code Run Logs

Code run logs provide details about what happened during a run, as well as the outcome.

To view these logs, complete the following steps.

1

Select Code Run.

In the Code Runs page, select the code run that you want to see logs for.

The logs page for the Code Run is shown. The start and finish time and date of the run, as well as the status of the run appears. Logs can be accessed while the Code Run is active and after the Code Run has completed. While the code is running, an auto-refresh option is available. Details are shown under the details tab; reports (if any) are shown under the reports tab. Reports are generated using the Rhino SDK.

2

Select the Details Tab.

Select the Details tab if needed (it should be selected by default).

The Details tab provides the following:

  • General Info - information about the Code Run, including

    • Code Object name and type

    • Code Object version

    • Code Object description

    • Input and Output Datasets

    • Compute Resources Mode including the requested resources at run time (if applicable).

    • Show Code Object Configuration button. Click this button to see the code object configuration. Show Code Run Configuration button. Click this button to see the code run configuration.

    • View in TensorBoard button. Click this button to view results in TensorBoard.

  • System Logs. These can include errors or warnings that occurred from the FCP side, e.g. Dataset import errors.

  • FL server logs (for NVIDIA FLARE runs)

  • FL client logs (for NVIDIA FLARE runs)

    • Each federated client's logs will appear separately

  • Client-specific logs (for all other run types).

The Reports tab is a workspace associated with the run where you can output performance metrics you care about. Reports are blank by default as they are created using the Rhino SDK.

Troubleshooting Code Runs

Error Message that Usage Limit Has Been Exceeded

If you get an error message indicating that the usage limit has been exceeded, your administrator has set usage limits on the number of input rows a workgroup can process per model within a certain timeframe. Getting this message means that the entire run has been cancelled. Please contact your administrator for more details and help with resolving the issue.

Viewing a Code Run's Configuration

To get an object's configuration, make sure you are on the page containing the original object you would like to view the configuration of. In the box where your original object is, there should be a row for each version. Navigate to the version you would like to view the configuration for and select the three-dot menu button, shown below:

The menu button is on the right-hand side of the row, click it to view a new menu. The new menu should have an option to show that object's configuration, click on that to see the object's configuration.

For Code Objects and Code Runs, if you chose the Use VM Pool option, you will use the pool that was indicated during the Code Object or Code Run configurations. Selecting this option shows the resources, including the number of VMs and vCPUs that will be allocated, as well as the amount of RAM, the size of the disk, the number of GPUs, the GPU type/model, and the amount of VRAM.

Deleting a Code Run

Follow these steps to delete a code run.

1

Open the Code Runs page

Go to the page that lists your code runs.

2

Find the code run

If needed, use the search fields at the top right.

  • Use Search Name to search by code run name.

  • Use Search Description to search by code run description.

Find the code run you want to delete.

3

Open the menu for the code run

Select the three-dot menu on the right side of the row, shown below.

4

Remove the code run

Select Remove code run.

Running an Interactive Container and Accessing Workspace Files

Interactive Containers allow you to run entire containerized applications such as Jupyter Notebook (and not just containerized code) remotely and interact with them. You can use Jupyter Notebook, QuPath, 3D Slider, R Studio and LibreOffice. R Studio and LibreOffice require more custom setup information: if you choose to use them, please contact us for help.

An Interactive Container similar to connecting to a remote desktop, but you do not have the ability to exfiltrate any data. (This is governed by permissions policies, requires approval from the data owner, and is logged and auditable.)

Running an Interactive Container

1

In the Code Runs page, select a code run that has the row of type "IC" and shows a status of "Running".

2

Connect to the active session by clicking the arrow icon.

It appears under the Type column for interactive container entries.

3

A new tab opens with the interactive session.

This tab runs your Interactive Container on the remote client.

4

Click the desktop icon and interact with the application as you would normally.

Working with Files in the Workspace Folder

In your interactive session, files such as code run outputs are stored in the /workspace folder, by default. This folder keeps your work saved across multiple interactive sessions, so you don’t have to manually save and import files as input/output datasets.

1

If you are unfamiliar with the Rhino FCP Workspace, review the steps below before continuing.

2

Navigate to the /workspace folder using the file explorer or navigator for your IC platform.

If you performed a code run, results are stored, by default, in this folder.

3

If you do not want the files to be overwritten, copy them in another folder so that you can interact with them.

Note that if you overwrite a file in the /workspace folder, the changes will be in any other Interactive Container session that you have running (provided it is under your account and it is in the same workgroup).

Saving Output Data

With the Interactive Container running do the following.

  • Save the data file. For tabular data, the output is saved to /output/0/dataset.csv. For file data, save the output to /output/0/file_data/.

  • After you have saved all your files, click the desktop icon named Create Output Dataset. This will run a local script that looks for files under /output/0/file_data/ and populates a new /output/0/dataset.csvfile with the file names so they can be imported as a dataset.

When you terminate the interactive session, the FCP will attempt to import the output dataset defined in the /output/0/dataset.csv file. If you did not create this file, the Code Run will show an “Error: failure to import dataset” message.

Exporting Files from the Workspace Folder

After you've saved your output data using the directions in Saving Output Data, you can extract files from your /workspace folder to a location outside the Rhino Client. To do this, export the dataset(s) to client-mounted storage or to /rhino_data by following the instructions in Importing and Exporting Datasets to and from Your Network Storage.

Last updated

Was this helpful?