Cloud Training on RunPod: A Field Guide to the Edge Cases AlphaPebble Labs engineers detailed a field guide for training AI models on RunPod's rented GPU infrastructure, highlighting edge cases such as the SSH gateway acting as a console rather than an exec channel, which breaks standard scp/sftp workflows. The guide recommends specific base images, account-level SSH key registration, and cost-effective GPU choices like the RTX 3090 for small-model fine-tuning. Originally published by AlphaPebble Labs — we build AI-powered intelligence pipelines. Reading time: ~15 minutes. Audience: anyone who has to train or fine-tune a model on a rented GPU. New terms introduced: PTY, SFTP, gated repo, base image, pexpect, File Integrity Verification, end-to-end MD5. This is the field guide I wish I had when I started: every command, every error message, every workaround that turned a 4-hour "wasted on infra" afternoon into a 30-minute "ship it" morning. It is dense. It is opinionated. It is war stories, not a tutorial. You sign up, you spin up a "pod" a Linux container with a GPU , and you connect to it. The container comes with PyTorch + CUDA pre-installed. You can ssh into it, pip install what you need, and run your training script. The catch: RunPod's SSH gateway is a console, not an exec channel. Every script you have ever written that does ssh host "command" will fail. Every CI/CD pipeline you have ever used that does scp or sftp will fail. You cannot use the standard tools. You have three things that do work: Interactive — you log in and type commands by hand. ssh — peer-to-peer file transfer between two machines that both have runpodctl send / runpodctl receive runpodctl installed. Generates a one-time code. HuggingFace Hub — if your model is on HF, you can huggingface-cli download it from the pod the pod has internet . That's it. There is no SCP, no rsync, no SFTP subsystem. If you want to move a file between your laptop and a pod, you use one of those three. RunPod offers many "templates" pre-built images . A solid default for a small ~1B parameter LoRA fine-tune is runpod/pytorch:2.1.0-py3.10-cuda11.8.0-devel-ubuntu22.04 . The numbers matter: PyTorch 2.1.0 : works with transformers up to 4.x out of the box. For transformers = 5.0 you need PyTorch = 2.4 see the upgrade section below . CUDA 11.8 : matches an RTX 3090's compute capability 8.6 . CUDA 12.x is also fine on a 3090, but the matching 11.8 toolkit ships with the devel image, so you don't have to fiddle with nvcc if you ever need to compile a CUDA extension. Ubuntu 22.04 : LTS, well-supported, has Python 3.10 in the system. The image also has python3.10 in /usr/local/bin which is the one with PyTorch installed; don't try to use python which is the system 3.10 without PyTorch or you'll be debugging "torch not found" for 20 minutes. python Verify CUDA works after pod startup python3 -c "import torch; print f'torch: {torch. version }, cuda: {torch.cuda.is available }' " Expected: torch: 2.1.0+cu118, cuda: True For a small model ≤1-2B params + LoRA , the RTX 3090 at ~$0.22/hr is usually the right call over the RTX 4090 at ~$0.40/hr. Both have 24 GB VRAM; the 4090 has faster tensor cores, but for a small-model/few-epoch workload the time saved is minutes, not hours. The 3090 tends to be ~45% cheaper for ~5% less speed — the math is rarely close. Save the A100 40/80 GB and H100 for fine-tuning 7B+ models — they're overkill and not worth the cost below that. RunPod has two places to register SSH keys: Account-level Settings → SSH Public Keys : the key is added to every new pod you create. This is the right place to add your key. Pod-level Connect → Add SSH Key : only applies to the current pod. Disappears when the pod is terminated. Always use the account-level key. If you only add at the pod level, you have to re-add it every time you create a new pod, which is annoying when you are iterating. Generate a dedicated key for RunPod don't reuse your GitHub key ssh-keygen -t ed25519 -f ~/.ssh/id ed25519 runpod -C "runpod-$ whoami " Copy the public key to RunPod Settings → SSH Public Keys cat ~/.ssh/id ed25519 runpod.pub The RunPod SSH connection string looks like: ssh root@