How to run TRELLIS image-to-3D on a cloud GPU
Rent a GPU on Deploy, then open a terminal in JupyterLab or over SSH. Install TRELLIS from the microsoft/TRELLIS README, load the image-to-3D checkpoint that file names, and run the minimal example or the Gradio app. Copy sample.glb and sample.ply off the instance before you destroy it. Destroying the instance deletes its disk.
Another image-to-3D install, with its own memory lines, is How to run Hunyuan3D on a cloud GPU. InstantMesh’s README, app.py, and run.py print no GPU GB figure: How to run InstantMesh image-to-3D on a cloud GPU. If the process runs out of memory: How to fix CUDA out of memory on a cloud GPU. The kernel-image note for a newer card is How to fix CUDA no kernel image on an RTX 5090. The tunnel for the Gradio app is How to use SSH port forwarding on a cloud GPU.
The LICENSE file is the MIT License. Its copyright line is Copyright © Microsoft Corporation. The README says TRELLIS models and the majority of the code are licensed under that MIT license, and names different licenses for the diffoctreerast and modified Flexicubes submodules. Read those files before you redistribute the program or the weights.
The commands below are copied from the upstream files named in each step. They were not run on a CloudGPU instance for this page. Anything this page adds around them is marked.
A later repository named TRELLIS.2 exists. The TRELLIS README at the commit below does not link it and does not say to use it. This page follows the TRELLIS README.
What the README says about memory
The README prerequisites say an NVIDIA GPU with at least 16GB of memory is necessary, and that the code has been verified on NVIDIA A100 and A6000 GPUs. Those sentences are the README’s. This page did not remeasure them. The README prints A100 and A6000 without a memory suffix. Catalog names that include A100 are A100 40G and A100 80G. The catalog name that includes A6000 is RTX A6000. The README does not print those suffixes. A later training sentence says the models are trained on NVIDIA A100 GPUs. That sentence is about training, not a second minimum.
The same prerequisites say the code is currently tested only on Linux, that it has been tested with CUDA versions 11.8 and 12.2, and that Python 3.8 or higher is required. The install note says the new trellis environment uses pytorch 2.4.0 with CUDA 11.8 by default.
GET /v1/public/compute-capabilities does not list GPUs. It returns feature flags. The memory column is vram_gb from gpu-prices.json, updated_at 2026-11-13T05:11:23.012Z. GET /v1/public/gpu-catalog the same day (generated_at 2026-11-13T05:11:24.062Z) listed the same names and the same vram_gb values, plus Ascend 910B at 64, which is not in gpu-prices.json and is not listed here. The catalog response also includes an availability field. This page does not copy it. Every prices row has gpu_count 1. Rows whose vram_gb is below the README’s 16GB line are RTX 2080 at 8, RTX 3080 at 10, RTX 2080 Ti at 11, and RTX 3080 Ti at 12. Every other row in the table is 16 or higher. This page did not run TRELLIS and does not mark a row as enough. Which listing you can start is on Deploy.
The catalog template list had no TRELLIS template.
| Catalog name | vram_gb |
|---|---|
| RTX 2080 | 8 |
| RTX 3080 | 10 |
| RTX 2080 Ti | 11 |
| RTX 3080 Ti | 12 |
| V100 16G | 16 |
| A30 | 24 |
| RTX 3090 | 24 |
| RTX 4090 | 24 |
| RTX 4090D | 24 |
| RTX 4080 SUPER 32G | 32 |
| RTX 5090 | 32 |
| RTX 5090D | 32 |
| V100 32G | 32 |
| A100 40G | 40 |
| A800 40G | 40 |
| A40 | 48 |
| RTX 4090 48G | 48 |
| RTX 4090D 48G | 48 |
| RTX A6000 | 48 |
| NVIDIA RTX PRO 5000 72G | 72 |
| RTX PRO 5000 72G | 72 |
| A100 80G | 80 |
| A800 80G | 80 |
| H800 | 80 |
| RTX 6000D | 83 |
| H20 96G | 96 |
| RTX PRO 6000 96G | 96 |
| RTX PRO 6000 Max-Q | 96 |
| H20-3e 141G | 141 |
Install
On Deploy, choose Raw GPU. The deploy page says “SSH access and root within a dedicated container”. The README clone lines are:
git clone --recurse-submodules https://github.com/microsoft/TRELLIS.git
cd TRELLIS
The dependency line, after the notes in that section, is:
. ./setup.sh --new-env --basic --xformers --flash-attn --diffoctreerast --spconv --mipgaussian --kaolin --nvdiffrast
The README says --new-env creates a conda environment named trellis, and that removing the flag uses an existing environment. It says that environment uses pytorch 2.4.0 with CUDA 11.8 by default. It says that if several CUDA Toolkit versions are installed, set PATH before the command, and its example is export PATH=/usr/local/cuda-11.8/bin:$PATH. It says GPUs that do not support flash-attn can drop the --flash-attn flag so the script installs xformers only, and then set ATTN_BACKEND to xformers. The help text it prints also lists --train and --demo. The Gradio section later runs . ./setup.sh --demo for the demo dependencies. This page did not run the script. The commits API for setup.sh listed 7a1f706b7314887d8b2f43404788636fec4d191b, committed 2025-03-25T05:30:17Z. Repository HEAD 193e0502b5cb3eb5997ec457d5340e95d09b158e (2026-10-27T05:00:50Z) is a workflow-pin merge. The README commit is 6b0d64751ad54d9c32d7b05fec482eb29178f56f (2025-08-05T13:50:35Z).
Checkpoints and the minimal example
The README model table names four checkpoints:
| Model | Params in the README | Hugging Face id in the README |
|---|---|---|
| TRELLIS-image-large | 1.2B | microsoft/TRELLIS-image-large |
| TRELLIS-text-base | 342M | microsoft/TRELLIS-text-base |
| TRELLIS-text-large | 1.1B | microsoft/TRELLIS-text-large |
| TRELLIS-text-xlarge | 2.0B | microsoft/TRELLIS-text-xlarge |
The README says it is always recommended to use the image-conditioned version, and that all VAEs are included in the TRELLIS-image-large model repo. Its load line is:
TrellisImageTo3DPipeline.from_pretrained("microsoft/TRELLIS-image-large")
It also says a local folder path can be passed instead, with the folder structure maintained. The model API on 2026-11-13 returned gated false for each of the four ids. The top-level license field was null. cardData.license was mit for each. This page did not download the files.
The minimal example in the README, which it says is example.py, is:
import os
# os.environ['ATTN_BACKEND'] = 'xformers' # Can be 'flash-attn' or 'xformers', default is 'flash-attn'
os.environ['SPCONV_ALGO'] = 'native' # Can be 'native' or 'auto', default is 'auto'.
# 'auto' is faster but will do benchmarking at the beginning.
# Recommended to set to 'native' if run only once.
import imageio
from PIL import Image
from trellis.pipelines import TrellisImageTo3DPipeline
from trellis.utils import render_utils, postprocessing_utils
# Load a pipeline from a model folder or a Hugging Face model hub.
pipeline = TrellisImageTo3DPipeline.from_pretrained("microsoft/TRELLIS-image-large")
pipeline.cuda()
# Load an image
image = Image.open("assets/example_image/T.png")
# Run the pipeline
outputs = pipeline.run(
image,
seed=1,
)
# outputs is a dictionary containing generated 3D assets in different formats:
# - outputs['gaussian']: a list of 3D Gaussians
# - outputs['radiance_field']: a list of radiance fields
# - outputs['mesh']: a list of meshes
# Render the outputs
video = render_utils.render_video(outputs['gaussian'][0])['color']
imageio.mimsave("sample_gs.mp4", video, fps=30)
video = render_utils.render_video(outputs['radiance_field'][0])['color']
imageio.mimsave("sample_rf.mp4", video, fps=30)
video = render_utils.render_video(outputs['mesh'][0])['normal']
imageio.mimsave("sample_mesh.mp4", video, fps=30)
# GLB files can be extracted from the outputs
glb = postprocessing_utils.to_glb(
outputs['gaussian'][0],
outputs['mesh'][0],
# Optional parameters
simplify=0.95, # Ratio of triangles to remove in the simplification process
texture_size=1024, # Size of the texture used for the GLB
)
glb.export("sample.glb")
# Save Gaussians as PLY files
outputs['gaussian'][0].save_ply("sample.ply")
The commented sampler dictionaries in that README block, and in example.py, are not repeated in the block above. They set sparse_structure_sampler_params steps to 12 and cfg_strength to 7.5, and slat_sampler_params steps to 12 and cfg_strength to 3. Those lines are comments. The call that runs passes the image and seed=1. This page did not measure the commented values. The README says the run writes sample_gs.mp4, sample_rf.mp4, sample_mesh.mp4, sample.glb, and sample.ply. Those paths are in the working directory. This page did not run the example. The commits API for example.py listed 7b96b73f1195b8f9a6d76f9d089722dd93bec39a, committed 2025-05-14T03:53:08Z.
Gradio
The README says app.py is a Gradio demo and that the extra dependencies are:
. ./setup.sh --demo
Then:
python app.py
It says to open the address shown in the terminal. app.py calls demo.launch() with no arguments. This page did not start the app and does not state a port number. How to use SSH port forwarding on a cloud GPU is the tunnel once that address is on screen. app.py sets TMP_DIR to tmp under the repository. The generate function writes tmp/<session hash>/sample.mp4. extract_glb writes sample.glb in that directory. extract_gaussian writes sample.ply there. The interface note says the Gaussian file can be very large (~50MB). That size is the note’s. This page did not measure a file.
The README does not link a ComfyUI install. The ComfyUI examples top-level directory list on 2026-11-13 had no directory named for this project. 3d/README.md in that repository documents a different model and does not name TRELLIS. Examples HEAD was f9431bb000ce792094ff345446e22cac1ea6cef3. This page does not add a ComfyUI install.
When it fails
CUDA out of memory. The README’s minimum is at least 16GB. It does not print a second low-memory flag in the image-to-3D example. The commented ATTN_BACKEND line is the example’s own comment, not a memory measurement. If the process raises that error, use how to fix CUDA out of memory on a cloud GPU.
“CUDA error: no kernel image is available for execution on the device” on an RTX 5090. The install note says the new environment uses pytorch 2.4.0 with CUDA 11.8. It does not name compute capability 12.0. The verified-GPU sentence names A100 and A6000. The RTX 5090 guide says that card is compute capability 12.0 (sm_120) and that PyTorch 2.7 and later, on a build for CUDA 12.8 or newer, is the line that announced support. This page did not install a torch wheel and did not re-test this package on an RTX 5090. Catalog RTX 5090 and RTX 5090D are 32. That is the catalog number only.
Save the mesh, then destroy
Copy sample.glb, sample.ply, and the mp4 files, or the tmp directory if you used the web demo, before you destroy the instance. Save your work before you destroy a cloud GPU is the checklist. The terms say data on local instance storage is permanently deleted when the instance is destroyed.
The pricing page FAQ states the billing rule in these words:
Per-minute options have a 1-minute minimum; unused prepaid minutes are refunded when you destroy the instance. Some configurations use whole-hour billing with a 1-hour minimum; unused time within a charged hour is not refunded on voluntary stop. The billing period, minimum charge and initial prepayment are shown before confirmation. No subscription.
Prices are not copied here.
Frequently asked questions
How much GPU memory does the TRELLIS README print?
The README says an NVIDIA GPU with at least 16GB of memory is necessary, and that the code has been verified on NVIDIA A100 and A6000 GPUs. This page did not remeasure that. Catalog rows whose vram_gb is below 16 are RTX 2080 at 8, RTX 3080 at 10, RTX 2080 Ti at 11, and RTX 3080 Ti at 12. The README prints A100 and A6000 without the catalog suffixes. Catalog names that include A100 are A100 40G and A100 80G. The catalog name that includes A6000 is RTX A6000. This page does not mark a row as enough. Which listing you can start is on https://cloudgpu.app/deploy.
What is the documented Linux install and the minimal example?
The README clone line is git clone --recurse-submodules https://github.com/microsoft/TRELLIS.git and then cd TRELLIS. The setup line is . ./setup.sh --new-env --basic --xformers --flash-attn --diffoctreerast --spconv --mipgaussian --kaolin --nvdiffrast. The minimal example loads microsoft/TRELLIS-image-large, opens assets/example_image/T.png, and writes sample.glb and sample.ply in the working directory, plus sample_gs.mp4, sample_rf.mp4, and sample_mesh.mp4. This page did not run the install or the example.
Where do the GLB and PLY files go, and does the Gradio app set a port?
The example writes sample.glb and sample.ply in the working directory. app.py calls demo.launch with no arguments. This page did not start it and does not state a port number. The web demo writes sample.mp4, sample.glb, and sample.ply under tmp and the session hash. The interface note says the Gaussian file can be very large, about 50MB. That size is the note.
What license does the TRELLIS repository print?
The LICENSE file is the MIT License. Its copyright line names Microsoft Corporation. The grant includes the words free of charge. Those words are license text, not a CloudGPU price and not a storage allowance. The README says the models and the majority of the code use that MIT license, and that diffoctreerast and the modified Flexicubes submodule have their own licenses. The model API cardData license for the four README model ids was mit and gated was false. The file prints no dollar amount.
Sources (read 2026-11-13, Asia/Shanghai)
- microsoft/TRELLIS README (Linux, at least 16GB, A100 and A6000, CUDA 11.8 and 12.2, Python 3.8, clone,
setup.shflags, pytorch 2.4.0 with CUDA 11.8, model table,from_pretrained, minimal example,sample.glbandsample.ply, Gradiopython app.py, MIT): https://github.com/microsoft/TRELLIS/blob/main/README.md commit6b0d64751ad54d9c32d7b05fec482eb29178f56f. Repository HEAD193e0502b5cb3eb5997ec457d5340e95d09b158e, committed 2026-10-27T05:00:50Z, message a workflow-pin merge. The README does not link TRELLIS.2 example.py: commit7b96b73f1195b8f9a6d76f9d089722dd93bec39aapp.py(demo.launch()with no arguments,tmp/<session hash>/sample.mp4,sample.glb,sample.ply, the ~50MB note): same commitsetup.sh: commit7a1f706b7314887d8b2f43404788636fec4d191bLICENSE(MIT, Copyright © Microsoft Corporation): commitf2dcbf541322f1d07b908f66fc4a8b477eff80e7- Model API cards (
gatedfalse, top-levellicensenull,cardData.licensemit):microsoft/TRELLIS-image-largesha25e0d31ffbebe4b5a97464dd851910efc3002d96;microsoft/TRELLIS-text-baseshaf8e8cf00c40d53dea26b718e49169ce83cf24c67;microsoft/TRELLIS-text-largesha4aad9f4a110329a410974d7f41ce5333a9a1fc87;microsoft/TRELLIS-text-xlargeshae0b00432b8e3a8ecee0df806ab1df9f7281f2be4. Read 2026-11-13 - ComfyUI examples (no TRELLIS directory;
3d/README.mddoes not name TRELLIS): https://github.com/comfyanonymous/ComfyUI_examples commitf9431bb000ce792094ff345446e22cac1ea6cef3 - Public GPU memory: https://cloudgpu.app/gpu-prices.json (
updated_at2026-11-13T05:11:23.012Z) and https://cloudgpu.app/v1/public/gpu-catalog (generated_at2026-11-13T05:11:24.062Z).GET /v1/public/compute-capabilitiesreturned feature flags and no GPU list. The catalog had no TRELLIS template
Cards you can start are on the Deploy page. Prices are on https://cloudgpu.app/pricing and are not repeated here.
Last updated: 2026-11-13 (Asia/Shanghai).