Set up Lance, ByteDance’s 3B parameter unified multimodal model for text-to-image, text-to-video, image editing, and vision understanding tasks on NVIDIA L40 GPUs with 48GB VRAM.
This guide exists as a tested, machine-readable recipe in the Massed Compute MCP. Connect the MCP to Claude Desktop or compatible AI tools to deploy Lance with natural language commands.
Lance is ByteDance’s native unified multimodal model that handles text-to-image generation, text-to-video creation, image editing, video editing, and vision-based Q&A in a single 3B parameter architecture. Unlike chat models, Lance specializes in vision-grounded tasks with dedicated pipelines for each modality.
This guide covers the complete setup on NVIDIA L40 GPUs, including PyTorch 2.8.0 with CUDA 12.6, flash-attention optimization, weight downloads, and both CLI inference and Gradio web interface deployment.
| Component | Version | Purpose |
|---|---|---|
| Lance | 3B (ByteDance Research) | Multimodal model core |
| PyTorch | 2.8.0+cu126 | ML framework with CUDA 12.6 |
| flash-attn | 2.8.3 | Memory-efficient attention |
| Gradio | Latest | Web UI for multimodal tasks |
| Miniconda | Latest | Python environment management |
| Component | Minimum | Recommended |
|---|---|---|
| GPU | NVIDIA L40 (48GB VRAM) | NVIDIA L40 or higher |
| vCPU | 8 cores | 14+ cores |
| RAM | 48 GiB | 72+ GiB |
| Storage | 80 GB free | 100+ GB SSD |
| OS | Ubuntu 24.04 | Ubuntu 24.04 LTS |
| NVIDIA Driver | ≥ 555 | Latest stable |
Massed Compute VM Pricing
| SKU | Description | vCPU | RAM | Storage | Price | Capacity |
|---|---|---|---|---|---|---|
gpu_1x_A30 |
1x A30 (24GB) | 16 | 48 GiB | 256 GB | $0.35/hr | 0 |
gpu_2x_A30 |
2x A30 (24GB) | 30 | 96 GiB | 512 GB | $0.70/hr | 0 |
gpu_1x_l40_spot |
1x L40 (48GB) [Spot] | 14 | 72 GiB | 625 GB | $0.78/hr | 28 |
gpu_1x_6000_ada |
1x RTX 6000 ADA (48GB) | 12 | 72 GiB | 350 GB | $0.79/hr | 9 |
gpu_1x_l40 |
1x L40 (48GB) | 14 | 72 GiB | 625 GB | $0.86/hr | 28 |
gpu_2x_a5000 |
2x RTX A5000 (24GB) | 20 | 64 GiB | 512 GB | $0.88/hr | 0 |
gpu_1x_l40_spot SKU offers significant savings at $0.78/hr compared to on-demand L40 instances. Spot instances may be reclaimed with 2-minute notice during high demand.
Step-by-Step Deployment
Launch L40 VM
Create a new L40 instance with Ubuntu 24.04. Use the gpu_1x_l40 or gpu_1x_l40_spot SKU for optimal Lance performance.
curl -X POST https://vm.massedcompute.com/api/instances/launch \
-H "Authorization: Bearer YOUR_API_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"productName": "gpu_1x_l40",
"imageId": 184,
"regionName": "any",
"instanceName": "lance-l40"
}'
Connect via SSH
Wait for the instance to reach running status, then connect with your SSH key. Clear any stale host keys if reusing an IP.
ssh-keygen -R YOUR_VM_IP ssh -i ~/.ssh/your-key ubuntu@YOUR_VM_IP
Verify GPU and Install Miniconda
Confirm the NVIDIA L40 is detected and install Miniconda for Python environment management.
nvidia-smi # Verify L40 + driver ≥ 555
cd ~ && wget -q https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O miniconda.sh \
&& bash miniconda.sh -b -p "$HOME/miniconda3" \
&& eval "$("$HOME/miniconda3/bin/conda" shell.bash hook)"
Clone Lance and Create Environment
Download Lance from ByteDance Research and create a Python 3.11 conda environment with required dependencies.
mkdir -p ~/work && cd ~/work
git clone https://github.com/bytedance/Lance.git && cd Lance
eval "$("$HOME/miniconda3/bin/conda" shell.bash hook)"
# Accept Anaconda Terms of Service
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
conda create -n Lance python=3.11 -y && conda activate Lance
python --version # Must print 3.11.x
Install PyTorch with CUDA Support
Install PyTorch 2.8.0 with CUDA 12.6 support and Lance dependencies from requirements.txt.
eval "$("$HOME/miniconda3/bin/conda" shell.bash hook)"
conda activate Lance
pip install torch==2.8.0 torchvision==0.23.0 torchaudio==2.8.0 \
--index-url https://download.pytorch.org/whl/cu126
pip install -r requirements.txt
Install Flash Attention
Install flash-attention 2.8.3 using a prebuilt wheel to avoid compilation requirements.
eval "$("$HOME/miniconda3/bin/conda" shell.bash hook)"
conda activate Lance
pip install --no-cache-dir --no-deps --force-reinstall \
"https://huggingface.co/strangertoolshf/flash_attention_2_wheelhouse/resolve/main/wheelhouse-flash_attn-2.8.3/linux_x86_64/torch2.8/cu12/abiTRUE/cp311/flash_attn-2.8.3+cu12torch2.8cxx11abiTRUE-cp311-cp311-linux_x86_64.whl"
python -c "import torch, flash_attn; print(torch.__version__, torch.cuda.is_available(), torch.cuda.get_device_name(0), flash_attn.__version__)". Output must contain True, NVIDIA L40, and 2.8.3.
Download Model Weights
Download Lance-3B and Lance-3B_Video weights (~30GB total) from Hugging Face. Use a scoped read-only token to avoid rate limits.
eval "$("$HOME/miniconda3/bin/conda" shell.bash hook)"
conda activate Lance
mkdir -p downloads
python - <<'PY'
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="bytedance-research/Lance",
local_dir="./downloads/",
cache_dir="./downloads/cache",
local_dir_use_symlinks=False,
resume_download=True,
allow_patterns=["*.json","*.safetensors","*.bin","*.py","*.md","*.txt","*.pth"],
)
PY
du -sh downloads/* # Lance_3B ≈ 12GB, Lance_3B_Video ≈ 14GB
Launch Gradio Interface
Set optimization environment variables and start the Gradio web interface for interactive multimodal tasks.
export NVIDIA_TF32_OVERRIDE=1
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:512
export CUDA_MODULE_LOADING=LAZY
eval "$("$HOME/miniconda3/bin/conda" shell.bash hook)"
cd ~/work/Lance && conda activate Lance
python lance_gradio.py --server-name 127.0.0.1 --server-port 7860
Open an SSH tunnel from your local machine: ssh -L 7860:localhost:7860 YOUR_VM_IP
Access the interface at http://localhost:7860. First generation takes 30-90 seconds for model loading.
Run CLI Smoke Test
Validate the installation with a noninteractive image understanding test to verify all components work correctly.
eval "$("$HOME/miniconda3/bin/conda" shell.bash hook)"
cd ~/work/Lance && conda activate Lance
export NVIDIA_TF32_OVERRIDE=1
export PYTORCH_CUDA_ALLOC_CONF=expandable_segments:True,max_split_size_mb:512
export CUDA_MODULE_LOADING=LAZY
bash inference_lance.sh \
--TASK_NAME x2t_image \
--MODEL_PATH downloads/Lance_3B \
--SAVE_PATH_GEN results/qa_x2t_image \
--VALIDATION_NUM_TIMESTEPS 1 \
--USE_KVCACHE true
find results/qa_x2t_image -maxdepth 2 -type f -printf '%p %s bytes\n' | sort
Troubleshooting
Python Environment Issues
If python --version shows 3.13 after conda activate Lance, the environment creation failed. Re-run the conda tos accept commands and recreate the environment. Lance requires Python 3.11.x exactly.
CUDA and PyTorch Problems
If torch.cuda.is_available() returns False while nvidia-smi works, you likely installed CPU-only PyTorch. Reinstall from the cu126 index. If torch.version.cuda is None, confirm you're using the correct pip index URL.
Flash Attention Build Errors
If you see CUDA_HOME environment variable is not set, the host has driver-only CUDA (no nvcc). Use the prebuilt wheel from step 6 instead of compiling from source.
Memory and Performance
For torch.cuda.OutOfMemoryError, reduce NUM_FRAMES for video tasks, use lower resolution settings, and ensure no other GPU processes are running. Restart the Gradio interface to clear VRAM fragmentation.
Network and Downloads
If Hugging Face downloads stall with 429 errors, authenticate with huggingface-cli login using a scoped read-only token. Downloads resume automatically from interruption points.
Skip All of This: Deploy with an AI Agent
This entire Lance deployment guide exists as a tested, machine-readable recipe in the Massed Compute MCP (Model Context Protocol). Instead of running commands manually, connect an AI agent to handle the complete setup.
Add this MCP server configuration to your AI tool:
{
"mcpServers": {
"massed-compute": {
"type": "http",
"url": "https://vm.massedcompute.com/api/mcp",
"headers": { "Authorization": "Bearer MC_TOKEN" }
}
}
}
Then say:
The agent matches your request against the recipe catalog (tested June 10, 2026), provisions the right L40 VM shape, installs Miniconda and dependencies, downloads the ~30GB model weights, configures the environment, and verifies everything works with the CLI smoke test. If any step fails, deployment stops immediately with diagnostic output.
Quick Setup Guide
For experienced users, here's the condensed deployment sequence:
- Launch
gpu_1x_l40with Ubuntu 24.04 (image 184) - Install Miniconda:
wget + bash miniconda.sh -b - Clone Lance repo and create Python 3.11 conda env
- Install PyTorch 2.8.0+cu126 and requirements
- Install flash-attn 2.8.3 prebuilt wheel
- Download 30GB model weights via
snapshot_download - Set optimization env vars and launch Gradio on port 7860
- SSH tunnel to
localhost:7860for web interface - Run CLI smoke test:
inference_lance.sh --TASK_NAME x2t_image
Total setup time: ~60 minutes including downloads. First generation takes 30-90 seconds for model loading.
Frequently Asked Questions
01What multimodal tasks does Lance support?
Lance handles six core tasks: text-to-image generation, text-to-video creation, image editing, video editing, image-based Q&A, and video-based Q&A. Unlike general chat models, Lance specializes in vision-grounded tasks with dedicated pipelines optimized for each modality.
02Why does the first generation take so long?
Lance uses lazy loading to minimize startup time and memory usage. The model weights (12-14GB per variant) load into VRAM only when first accessed for each task type. Subsequent generations stay warm and complete much faster. Watch nvidia-smi during first use to see VRAM climbing to ~25GB.
03Can I run Lance on smaller GPUs than L40?
Lance requires substantial VRAM for its unified architecture. While technically possible on 24GB cards like A5000, you'll need to reduce batch sizes, frame counts, and resolution significantly. The L40's 48GB provides comfortable headroom for all task types at reasonable quality settings.
04How do I optimize Lance for production use?
Set the optimization environment variables (NVIDIA_TF32_OVERRIDE=1, PYTORCH_CUDA_ALLOC_CONF, CUDA_MODULE_LOADING=LAZY) and consider keeping models warm between requests. For batch processing, use the CLI interface instead of Gradio to avoid web overhead. Monitor VRAM with nvidia-smi to detect fragmentation.
05What's the difference between Lance-3B and Lance-3B_Video?
Both are variants of the same 3B parameter architecture. Lance-3B handles text-to-image, image editing, and image Q&A tasks. Lance-3B_Video extends support to text-to-video, video editing, and video Q&A. The setup downloads both models (~26GB total) so you can access all six task types through the unified interface.











