Developing Inside a GPU Docker Container
March 10, 2025 · View on GitHub
This guide assumes you've gone through the Docker setup section of the Getting Started GPU guide. We assume you're familiar with Docker and have a basic understanding of how to use it.
Option 1: Development Container
.devcontainer/nvidia/devcontainer.json in the repo can be used with VS Code, Cursor, and IDEA-based editors (e.g. PyCharm). Full list of supported editors.
Option 2: Manually Mounting Your Levanter Repo inside the Docker Container
If you are going to be adding to or extending Levanter for your own use case, these are the docker setup steps you should follow.
Clone the Levanter repository:
git clone https://github.com/stanford-crfm/levanter.git
Then run an interactive docker container with your levanter directory mounted as a volume. In this example, let's say your Levanter
repo is located at /nlp/src/username/levanter, then you would run the command below to make that directory accessible to the docker container.
sudo docker run -it --gpus=all -v /nlp/src/username/levanter:/levanter --shm-size=16g ghcr.io/nvidia/jax:levanter
When your container starts, the Levanter repo you cloned will be available at /levanter.
You should cd into the levanter directory and run the install command for levanter from that directory.
cd /levanter
pip install -e .
Now you should be able to run training jobs in this container and it will use the Levanter version you have in your mounted directory:
python src/levanter/main/train_lm.py \
--config_path config/gpt2_nano.yaml
For more information on how to train models in Levanter see our User Guide.
Saving Your Updated Container
After you make updates to your docker container, you may want to preserve your changes by creating a new docker image. To do so, you can detach or exit from your running container and commit these changes to a new docker images.
Exiting the Container
To detach from your container, but leave it running use Ctrl + P -> Ctrl + Q keys.
To stop and exit from your container, just type exit or use Ctrl + D.
Getting the Container ID
Next you need to get the ID for your container. If you run
sudo docker ps -a
All running and stopped containers will be listed, it should look something like this:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
6ab837e447fd ghcr.io/nvidia/jax:levanter "/opt/nvidia/nvidia_…" 26 minutes ago Exited (1) 6 seconds ago gifted_ganguly
f5f5b36634f0 ghcr.io/nvidia/jax:levanter "/opt/nvidia/nvidia_…" 30 minutes ago Exited (127) 26 minutes ago great_mendel
a602487cb169 ghcr.io/nvidia/jax:levanter "/opt/nvidia/nvidia_…" 39 minutes ago Exited (0) 31 minutes ago practical_lumiere
Committing the Container
You should select the CONTAINER ID for the container you want to preserve and run
sudo docker container commit [CONTAINER ID] [image-Name]:[image-tag]
If I wanted to create a new docker image called levanter:latest from the container 6ab837e447fd, I would run
sudo docker container commit 6ab837e447fd levanter:latest
Using the Committed Container
Now you can start a new container using your new image and all the changes you made to the original container should still be there:
sudo docker run -it --gpus=all --shm-size=16g levanter:latest