Setup EC2 for Docker with GPU
Follow these steps closely to render videos on EC2 in a Docker container.
These steps are opinionated, but specify a reference that works.
A word of warning: Deviating from the instructions, like:
- choosing a different AMI
- choosing a different Docker base
- choosing something else than EC2
- choosing a different host machine
may lead to the GPU not working. In this case, it is hard to debug.
We recommend to first follow these instructions and make changes once you have a working setup.
Setup EC2 for Docker with GPU
Add keyringbash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpgcurl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.listsudo apt-get update
Add keyringbash
curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpgcurl -s -L https://nvidia.github.io/libnvidia-container/stable/deb/nvidia-container-toolkit.list | sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.listsudo apt-get update
Install toolkitbash
sudo apt-get install -y nvidia-container-toolkit
Install toolkitbash
sudo apt-get install -y nvidia-container-toolkit
Add Docker's official GPG keybash
sudo apt-get updatesudo apt-get install ca-certificates curl gnupgsudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgsudo chmod a+r /etc/apt/keyrings/docker.gpg
Add Docker's official GPG keybash
sudo apt-get updatesudo apt-get install ca-certificates curl gnupgsudo install -m 0755 -d /etc/apt/keyringscurl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpgsudo chmod a+r /etc/apt/keyrings/docker.gpg
Add keyringbash
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update
Add keyringbash
echo "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/nullsudo apt-get update
Install Dockerbash
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Install Dockerbash
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
Configure the NVIDIA container runtimebash
sudo nvidia-ctk runtime configure --runtime=dockersudo systemctl restart docker
Configure the NVIDIA container runtimebash
sudo nvidia-ctk runtime configure --runtime=dockersudo systemctl restart docker
Dockerfile
and entrypoint.sh
. You can for example create them using the nano ./file-to-create
command.
Use Ctrl
X to save and quit.
Dockerfilebash
FROM node:20-bookwormRUN apt-get updateRUN apt-get install -y curl gnupg git chromiumRUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpgRUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" > /etc/apt/sources.list.d/nodesource.listRUN apt-get cleanRUN rm -rf /var/lib/apt/lists/*# Clone the repoRUN git clone https://github.com/remotion-dev/gpu-scene.gitWORKDIR /gpu-sceneRUN npm install# Copy the entrypoint script into the imageCOPY entrypoint.sh .CMD ["sh", "./entrypoint.sh"]
Dockerfilebash
FROM node:20-bookwormRUN apt-get updateRUN apt-get install -y curl gnupg git chromiumRUN curl -fsSL https://deb.nodesource.com/gpgkey/nodesource-repo.gpg.key | gpg --dearmor -o /etc/apt/keyrings/nodesource.gpgRUN echo "deb [signed-by=/etc/apt/keyrings/nodesource.gpg] https://deb.nodesource.com/node_18.x nodistro main" > /etc/apt/sources.list.d/nodesource.listRUN apt-get cleanRUN rm -rf /var/lib/apt/lists/*# Clone the repoRUN git clone https://github.com/remotion-dev/gpu-scene.gitWORKDIR /gpu-sceneRUN npm install# Copy the entrypoint script into the imageCOPY entrypoint.sh .CMD ["sh", "./entrypoint.sh"]
entrypoint.shbash
#!/bin/bashnpx remotion render --gl=angle-egl Scene out/video.mp4
entrypoint.shbash
#!/bin/bashnpx remotion render --gl=angle-egl Scene out/video.mp4
bash
sudo docker build . -t remotion-docker-gpusudo docker run --gpus all --runtime=nvidia -e "NVIDIA_DRIVER_CAPABILITIES=all" remotion-docker-gpu
bash
sudo docker build . -t remotion-docker-gpusudo docker run --gpus all --runtime=nvidia -e "NVIDIA_DRIVER_CAPABILITIES=all" remotion-docker-gpu
Debugging
Use the npx remotion gpu
command to get the output of chrome://gpu
to verify that the GPU is working.