<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Podstack Blog</title><description>Articles, stories, and updates from the Podstack team — across engineering, product, marketing, and more.</description><link>https://blog.podstack.ai/</link><language>en-us</language><item><title>How to Generate Multilingual Video Ads with ComfyUI, Wan 2.2, and Sarvam AI</title><link>https://blog.podstack.ai/multilingual-video-ads-comfyui-wan-sarvam-ai/</link><guid isPermaLink="true">https://blog.podstack.ai/multilingual-video-ads-comfyui-wan-sarvam-ai/</guid><description>Turn a single English brand prompt into a 30-second vertical video ad in six Indian languages. This tutorial wires ComfyUI, Wan 2.2 video diffusion, and Sarvam AI&apos;s Indic LLM and TTS into one reproducible pipeline.</description><pubDate>Mon, 18 May 2026 09:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Running a video ad campaign across India means shipping the same creative in six or more languages. Studios solve this by shooting once and dubbing later — the visuals stay constant, only the voiceover changes. This tutorial reproduces that exact workflow with open-source video diffusion and a single API for Indic language generation.&lt;/p&gt;&lt;p&gt;By the end of this guide you&amp;#39;ll have a command-line tool that takes &lt;strong&gt;one English brand prompt&lt;/strong&gt; and produces six 30-second vertical MP4s — one each in &lt;em&gt;Bengali, Odia, Telugu, Tamil, Hindi, and Marathi&lt;/em&gt; - sharing identical visuals but with native voiceovers in each language.&lt;/p&gt;&lt;h2 id=&quot;what-youll-build&quot;&gt;What you&amp;#39;ll build&lt;/h2&gt;&lt;p&gt;A reproducible ComfyUI workflow plus a TypeScript SDK that:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Uses Sarvam-M to draft a 30-second ad script from your brand prompt.&lt;/li&gt;&lt;li&gt;Generates six 5-second clips with Wan 2.2 (480×832) and stitches them into a vertical 30-second video.&lt;/li&gt;&lt;li&gt;Translates the script via Sarvam&amp;#39;s translate endpoint and produces native TTS for each language.&lt;/li&gt;&lt;li&gt;Muxes audio and video and writes one MP4 per language to disk.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;the-hardware-we-used&quot;&gt;The hardware we used&lt;/h2&gt;&lt;p&gt;We ran the entire pipeline on a single &lt;strong&gt;Podstack ComfyUI template&lt;/strong&gt; with the following configuration:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;GPU: &lt;strong&gt;1× NVIDIA L40S, 48 GB VRAM&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;vCPU: &lt;strong&gt;110&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;RAM: &lt;strong&gt;241 GB&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Persistent storage: &lt;strong&gt;100 GB NFS volume mounted at /data&lt;/strong&gt; (used for model weights and custom nodes - see Step 0)&lt;/li&gt;&lt;li&gt;Software image: ComfyUI 0.20.1 on PyTorch 2.6 / CUDA 12.4 (Conda env &lt;code&gt;comfyui&lt;/code&gt;)&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;End-to-end runtime for six languages from a cold prompt: &lt;strong&gt;22 minutes&lt;/strong&gt;. That includes Sarvam script generation, six Wan 2.2 video passes (the latents are reused, only the voiceover changes per language), translation, six TTS calls, and the final mux.&lt;/p&gt;&lt;h2 id=&quot;cost-podstack-vs-the-hyperscalers&quot;&gt;Cost: Podstack vs the hyperscalers&lt;/h2&gt;&lt;p&gt;Podstack bills per minute at &lt;strong&gt;₹2.96/min&lt;/strong&gt; for this configuration. The 22-minute run cost us &lt;strong&gt;₹65.12 (~$0.78 USD)&lt;/strong&gt; - one chai&amp;#39;s worth of compute for a six-language ad batch.&lt;/p&gt;&lt;p&gt;Here&amp;#39;s how that lines up against on-demand pricing on the hyperscalers for comparable hardware (single L40S with enough CPU/RAM to handle the video stitching, list price, US regions, mid-2026):&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Podstack (110 vCPU / 241 GB / 1× L40S): &lt;/strong&gt;₹2.96/min → &lt;strong&gt;₹65 for 22 min&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;AWS g6e.12xlarge (48 vCPU / 384 GB / 1× L40S): &lt;/strong&gt;~₹14.5/min → &lt;strong&gt;~₹320 for 22 min (≈5× Podstack)&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Azure NVads L40S v5 (single-GPU SKU, 36 vCPU / 220 GB): &lt;/strong&gt;~₹11/min → &lt;strong&gt;~₹245 for 22 min (≈3.8× Podstack)&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;&lt;strong&gt;GCP g2-standard-96 (L4, not L40S — closest CPU/RAM match): &lt;/strong&gt;~₹9/min, but L4 ≠ L40S so you&amp;#39;d run longer and lose VRAM headroom&lt;/li&gt;&lt;/ul&gt;&lt;blockquote&gt;Hyperscaler numbers are list/on-demand prices and don&amp;#39;t include egress, persistent disk, NAT, or India-region surcharges — all of which push real-world bills 20–40 % higher. Podstack&amp;#39;s INR-denominated billing also avoids FX markup on your card statement.&lt;/blockquote&gt;&lt;p&gt;The qualitative gap is bigger than the raw multiplier: the hyperscalers will happily charge you for the &lt;em&gt;whole hour&lt;/em&gt; you spent waiting for the spot quota, the IAM role, and the VPC peering. Podstack&amp;#39;s template is one click and bills the 22 minutes you actually used.&lt;/p&gt;&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;&lt;p&gt;Before you start, make sure you have:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A Podstack account with billing enabled (you&amp;#39;ll deploy the ComfyUI template in Step 0).&lt;/li&gt;&lt;li&gt;A &lt;strong&gt;Sarvam AI API key&lt;/strong&gt;. Sign up at sarvam.ai and copy the key from the dashboard.&lt;/li&gt;&lt;li&gt;Node.js 20+ and pnpm on your local machine.&lt;/li&gt;&lt;li&gt;Optional: a &lt;code&gt;kubectl&lt;/code&gt; config if you prefer shell-over-kube to the web terminal.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;step-0-launch-a-comfyui-pod-on-podstack&quot;&gt;Step 0 - Launch a ComfyUI pod on Podstack&lt;/h2&gt;&lt;p&gt;From the Podstack console, choose &lt;strong&gt;Deploy → Templates → ComfyUI&lt;/strong&gt;. Pick the L40S 48 GB flavour. Then - and this is the part most first-time users miss - &lt;strong&gt;attach a persistent volume and mount it at &lt;/strong&gt;&lt;code&gt;/data&lt;/code&gt;.&lt;/p&gt;&lt;blockquote&gt;The /data mount is not optional. The ComfyUI image&amp;#39;s entrypoint symlinks /data/custom_nodes → /opt/ComfyUI/custom_nodes and /data/models/&amp;lt;subdir&amp;gt;/* → /opt/ComfyUI/models/&amp;lt;subdir&amp;gt;/ on every container start. Without /data mounted, your custom nodes and the 14 GB of Wan 2.2 weights are wiped on every pod restart, and you burn 20 minutes re-downloading them each time.&lt;/blockquote&gt;&lt;p&gt;Suggested volume size: &lt;strong&gt;100 GB&lt;/strong&gt; - enough for Wan 2.2 + VAE + CLIP + future model swaps. Smaller volumes will fill up the first time you try a second model.&lt;/p&gt;&lt;p&gt;Click &lt;strong&gt;Deploy&lt;/strong&gt;. The pod is reachable in ~60 seconds. Note the assigned URL (e.g. &lt;code&gt;https://zcr59-8188.cloud.podstack.ai&lt;/code&gt;) - that&amp;#39;s both the ComfyUI UI and the SDK target.&lt;/p&gt;&lt;h2 id=&quot;step-1-install-the-custom-nodes-on-the-pod&quot;&gt;Step 1 - Install the custom nodes on the pod&lt;/h2&gt;&lt;p&gt;Open the Podstack web terminal (or &lt;code&gt;kubectl exec&lt;/code&gt;) and clone the project under &lt;code&gt;/opt/multilingual-ad&lt;/code&gt;. The install script downloads the Wan 2.2 fp8 UNet checkpoints, the matching VAE, the CLIP vision encoder, and pip-installs three custom Sarvam nodes (&lt;code&gt;SarvamScriptNode&lt;/code&gt;, &lt;code&gt;SarvamTranslateNode&lt;/code&gt;, &lt;code&gt;SarvamTTSNode&lt;/code&gt;) into the ComfyUI conda environment.&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-1--&gt;&lt;p&gt;The script writes the key to &lt;code&gt;/data/env.sh&lt;/code&gt; (mode 0600) so the entrypoint sources it on every restart — meaning your Sarvam key survives pod restarts the same way your models do. It takes about 20 minutes - most of that is the ~14 GB Wan 2.2 weights download landing on /data.&lt;/p&gt;&lt;p&gt;Once it finishes, restart ComfyUI. There&amp;#39;s no &lt;code&gt;supervisorctl&lt;/code&gt; in the default image; killing &lt;code&gt;python main.py&lt;/code&gt; is enough to trigger a clean pod restart and re-symlink the new custom nodes from /data.&lt;/p&gt;&lt;h2 id=&quot;step-2-build-the-workflow-graph-once&quot;&gt;Step 2 - Build the workflow graph once&lt;/h2&gt;&lt;p&gt;Open the ComfyUI UI at your pod URL and build the graph from scratch - or import the starter graph from &lt;code&gt;workflows/multilingual_ad.json&lt;/code&gt;. The shape is:&lt;/p&gt;&lt;blockquote&gt;SarvamScriptNode → (script text) → six parallel KSampler branches (one per 5-second clip) → VAE Decode → Image Batch Concatenate → VHS_VideoCombine. In parallel, SarvamTranslateNode → SarvamTTSNode feeds the audio input of VHS_VideoCombine.&lt;/blockquote&gt;&lt;p&gt;Export the finished graph as &lt;strong&gt;API JSON&lt;/strong&gt; (Save (API Format)) and commit it to &lt;code&gt;workflows/multilingual_ad.json&lt;/code&gt;. Then map the input node IDs in &lt;code&gt;sdk/src/nodes.json&lt;/code&gt; so the SDK knows which nodes to overwrite per run.&lt;/p&gt;&lt;h2 id=&quot;step-3-run-the-sdk-from-your-laptop&quot;&gt;Step 3 - Run the SDK from your laptop&lt;/h2&gt;&lt;p&gt;The SDK targets the ComfyUI HTTP API. It queues the workflow six times: the first run captures the generated English script and the latent seeds; the remaining five reuse them, swapping only the language code passed to &lt;code&gt;SarvamTranslateNode&lt;/code&gt; and &lt;code&gt;SarvamTTSNode&lt;/code&gt;. This is what guarantees identical visuals across languages.&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-2--&gt;&lt;p&gt;Outputs land in &lt;code&gt;sdk/outputs/&amp;lt;lang&amp;gt;/ad_&amp;lt;lang&amp;gt;-IN_&amp;lt;seed&amp;gt;.mp4&lt;/code&gt; - six files, all sharing the same seed and prompt, differing only in the voiceover track. End-to-end wall-clock on the spec above: &lt;strong&gt;~22 minutes&lt;/strong&gt;.&lt;/p&gt;&lt;h2 id=&quot;step-4-iterate-on-prompts-and-languages&quot;&gt;Step 4 - Iterate on prompts and languages&lt;/h2&gt;&lt;p&gt;Restrict the run to a subset of languages while you iterate on visual quality, then expand once you&amp;#39;re happy:&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-3--&gt;&lt;p&gt;A fixed seed pins the entire batch to the same visual roll, which is the common case for ad QA - you want every reviewer looking at the same shot.&lt;/p&gt;&lt;h2 id=&quot;gotchas-worth-knowing&quot;&gt;Gotchas worth knowing&lt;/h2&gt;&lt;p&gt;Sarvam-M is a reasoning model. Its raw completions include a &lt;code&gt;&amp;lt;think&amp;gt;&lt;/code&gt; preamble before the final answer. The &lt;code&gt;SarvamScriptNode&lt;/code&gt; strips it before downstream nodes see the text - if you wire Sarvam-M into your own graph, do the same or your script will leak chain-of-thought into the voiceover.&lt;/p&gt;&lt;p&gt;Wan 2.2 ships as separate high-noise and low-noise UNets. Use the &lt;strong&gt;fp8&lt;/strong&gt; variants - they fit in 48 GB with room for the VAE, while the bf16 variants do not.&lt;/p&gt;&lt;p&gt;VHS_VideoCombine &lt;em&gt;silently&lt;/em&gt; produces a silent MP4 if the audio input isn&amp;#39;t wired. If your output has no voiceover, re-check that connection before anything else.&lt;/p&gt;&lt;p&gt;If you forgot the &lt;code&gt;/data&lt;/code&gt; mount in Step 0 and the install script &lt;em&gt;appeared&lt;/em&gt; to succeed, you&amp;#39;ll find out the hard way on the first pod restart when &lt;code&gt;MISSING: SarvamScriptNode&lt;/code&gt; shows up in the verify script. Re-deploy the pod with the volume attached — there is no in-place rescue.&lt;/p&gt;&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;&lt;p&gt;You now have a one-command pipeline that turns a brand prompt into a campaign-ready set of localized video ads, running on an Indian-billed L40S for under a dollar per batch. The interesting part isn&amp;#39;t that any one model is doing magic - it&amp;#39;s that the production pattern (&lt;em&gt;generate visuals once, swap only the voiceover&lt;/em&gt;) maps cleanly onto a ComfyUI graph, a small SDK on top of it, and a pod template that bills per minute instead of per hour.&lt;/p&gt;&lt;p&gt;Next steps: extend the language list (Sarvam covers 11 Indic languages), swap Wan 2.2 for a higher-resolution model when your VRAM budget allows, or wire the SDK into a queue so a marketing team can self-serve through a form. &lt;strong&gt;The graph stays the same; only the inputs change.&lt;/strong&gt;&lt;/p&gt;&lt;h2 id=&quot;watch-the-output&quot;&gt;Watch the output&lt;/h2&gt;&lt;p&gt;Here&amp;#39;s one of the actual MP4s the pipeline produced - the &lt;strong&gt;Hindi&lt;/strong&gt; voiceover variant from a &lt;em&gt;&amp;quot;Premium chai brand, cozy monsoon vibe&amp;quot;&lt;/em&gt; prompt. Visuals are identical across the other five languages; only the audio track changes.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://github.com/Podstack-ai/example/raw/main/comfyui/multilingual-ad/assets/sample-output-hindi.mp4&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;strong&gt;▶ Play sample-output-hindi.mp4&lt;/strong&gt;&lt;/a&gt;  ·  (1.3 MB, hosted on the &lt;a href=&quot;https://github.com/Podstack-ai/example&quot; rel=&quot;noopener noreferrer&quot;&gt;Podstack-ai/example&lt;/a&gt; repo)&lt;/p&gt;&lt;h2 id=&quot;try-it-yourself&quot;&gt;Try it yourself&lt;/h2&gt;&lt;p&gt;Spin up the same ComfyUI template we used at &lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;strong&gt;podstack.ai&lt;/strong&gt;&lt;/a&gt; - new accounts get a &lt;strong&gt;joining bonus&lt;/strong&gt; that covers more than enough credits to run this six-language pipeline end-to-end and have room left over to experiment.&lt;/p&gt;&lt;p&gt;All the code in this post - the install script, the custom Sarvam nodes, the workflow JSON, and the TypeScript SDK - is open source at &lt;a href=&quot;https://github.com/Podstack-ai/example&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;strong&gt;github.com/Podstack-ai/example&lt;/strong&gt;&lt;/a&gt;. Clone it, point it at your pod, and you should have your first multilingual ad batch in under 30 minutes.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/daqmmqq3l/image/upload/v1779096436/podstack-blog/Screenshot_2026_05_18_at_2_24_03_PM_ae71c94aa4.png&quot; alt=&quot;How to Generate Multilingual Video Ads with ComfyUI, Wan 2.2, and Sarvam AI&quot;/&gt;&lt;/p&gt;</content:encoded><category>Tutorials</category><category>ComfyUI</category><category>Wan 2.2</category><category>Sarvam AI</category><category>Multilingual</category><category>Video Generation</category><category>Tutorial</category><category>AI infrastructure</category><category>Machine Learning</category><author>Saurav Kumar</author></item><item><title>How To Blur Faces in Videos Using a Jupyter Notebook on Podstack</title><link>https://blog.podstack.ai/how-to-blur-faces-in-videos-python-opencv-mtcnn/</link><guid isPermaLink="true">https://blog.podstack.ai/how-to-blur-faces-in-videos-python-opencv-mtcnn/</guid><description>Anonymise faces in 550 videos with MTCNN and OpenCV on a Podstack GPU pod. This Jupyter notebook tutorial streams WebVid-10M, detects every face, applies Gaussian blur, and zips the output — 171,480 faces processed in ~92 minutes.</description><pubDate>Tue, 12 May 2026 18:30:00 GMT</pubDate><content:encoded>&lt;h3 id=&quot;introduction&quot;&gt;Introduction&lt;/h3&gt;&lt;p&gt;When building video datasets that contain real people - such as stock footage, surveillance clips, or user-generated content - protecting the privacy of individuals is critical. Faces must be anonymised before any dataset can be responsibly published or shared.&lt;/p&gt;&lt;p&gt;In this tutorial, you will walk through a Jupyter notebook - &lt;code&gt;faceblur_opencv.ipynb&lt;/code&gt;  (&lt;a href=&quot;https://github.com/Podstack-ai/example/tree/main/pytorch-opencv&quot; rel=&quot;noopener noreferrer&quot;&gt;GITHUB LINK TO REPOSITORY)&lt;/a&gt; - that runs entirely on &lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;strong&gt;Podstack.ai&lt;/strong&gt;&lt;/a&gt; using the &lt;strong&gt;PyTorch CUDA 12 + OpenCV&lt;/strong&gt; template. The notebook is organised into self-contained cells, each building on the last. By the time you reach the final cell, it will have:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Streamed and filtered the &lt;a href=&quot;https://huggingface.co/datasets/TempoFunk/webvid-10M&quot; rel=&quot;noopener noreferrer&quot;&gt;WebVid-10M&lt;/a&gt; dataset to find videos containing people&lt;/li&gt;&lt;li&gt;Downloaded those videos using Python&amp;#39;s &lt;code&gt;requests&lt;/code&gt; library&lt;/li&gt;&lt;li&gt;Verified each file is readable with OpenCV&lt;/li&gt;&lt;li&gt;Detected every face in every frame using &lt;strong&gt;MTCNN&lt;/strong&gt; (Multi-task Cascaded Convolutional Networks) on GPU&lt;/li&gt;&lt;li&gt;Blurred each detected face using &lt;strong&gt;OpenCV&amp;#39;s Gaussian blur&lt;/strong&gt;&lt;/li&gt;&lt;li&gt;Written the anonymised frames to new video files&lt;/li&gt;&lt;li&gt;Archived everything into a single zip for download&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The notebook produced these results on a single Podstack GPU pod: &lt;strong&gt;550 videos&lt;/strong&gt; processed, &lt;strong&gt;256,326 frames&lt;/strong&gt; read, &lt;strong&gt;171,480 faces&lt;/strong&gt; blurred - in approximately 92 minutes.&lt;/p&gt;&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;&lt;p&gt;Before you begin, you will need:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A &lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;Podstack.ai&lt;/a&gt; account - sign up and claim your joining bonus to receive free GPU credits&lt;/li&gt;&lt;li&gt;A pod launched from the &lt;strong&gt;PyTorch CUDA 12 + OpenCV&lt;/strong&gt; template, which comes with &lt;code&gt;torch&lt;/code&gt;, &lt;code&gt;torchvision&lt;/code&gt;, &lt;code&gt;opencv-python&lt;/code&gt;, and CUDA 12 pre-installed&lt;/li&gt;&lt;li&gt;The notebook file &lt;code&gt;faceblur_opencv.ipynb&lt;/code&gt;, which you can upload directly to your pod&amp;#39;s Jupyter environment&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The following additional packages are installed inside the notebook itself in the first cell, so no manual setup is required:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;code&gt;datasets&lt;/code&gt; - for streaming WebVid-10M from Hugging Face&lt;/li&gt;&lt;li&gt;&lt;code&gt;requests&lt;/code&gt; - for downloading video files&lt;/li&gt;&lt;li&gt;&lt;code&gt;facenet-pytorch&lt;/code&gt; - for MTCNN face detection&lt;/li&gt;&lt;li&gt;&lt;code&gt;tqdm&lt;/code&gt; - for progress tracking&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;step-1-launching-your-podstack-pod-and-opening-the-notebook&quot;&gt;Step 1 - Launching Your Podstack Pod and Opening the Notebook&lt;/h2&gt;&lt;p&gt;Log in to &lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;Podstack.ai&lt;/a&gt; and click &lt;strong&gt;New Pod&lt;/strong&gt;. From the template gallery, select the &lt;strong&gt;PyTorch CUDA 12 + OpenCV&lt;/strong&gt; template. This template ships with:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Python 3.10&lt;/li&gt;&lt;li&gt;PyTorch with CUDA 12 support&lt;/li&gt;&lt;li&gt;OpenCV pre-built with video codec support&lt;/li&gt;&lt;li&gt;JupyterLab accessible directly from your browser&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Once your pod is running, click &lt;strong&gt;Open JupyterLab&lt;/strong&gt; from the pod dashboard. In the JupyterLab file browser, upload &lt;code&gt;faceblur_opencv.ipynb&lt;/code&gt; using the upload button, then double-click it to open it.&lt;/p&gt;&lt;blockquote&gt;&lt;strong&gt;Note: &lt;/strong&gt;The Podstack PyTorch CUDA 12 + OpenCV template pre-configures all CUDA environment variables. You do not need to set &lt;code&gt;CUDA_HOME&lt;/code&gt; or install GPU drivers manually - the pod handles this for you.&lt;/blockquote&gt;&lt;h2 id=&quot;step-2-cell-1-exploring-the-dataset&quot;&gt;Step 2 - Cell 1: Exploring the Dataset&lt;/h2&gt;&lt;p&gt;The first cell loads the WebVid-10M dataset in streaming mode and prints the very first entry to confirm the connection is working.&lt;/p&gt;&lt;!--CODE_BLOCK:python:cb-4--&gt;&lt;p&gt;&lt;strong&gt;Cell output:&lt;/strong&gt;&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-5--&gt;&lt;p&gt;The dataset is loaded in &lt;strong&gt;streaming mode&lt;/strong&gt; - no data is cached locally. The &lt;code&gt;next(iter(ds))&lt;/code&gt; call fetches only the first entry over the network, confirming the dataset is accessible without downloading all 10 million records.&lt;/p&gt;&lt;blockquote&gt;&lt;strong&gt;Note: &lt;/strong&gt;&lt;code&gt;streaming=True&lt;/code&gt; means each &lt;code&gt;next()&lt;/code&gt; call fetches one entry from the Hugging Face servers in real time. This is ideal for large datasets where you only need a subset.&lt;/blockquote&gt;&lt;h2 id=&quot;step-3-cell-2-filtering-for-videos-that-contain-people&quot;&gt;Step 3 - Cell 2: Filtering for Videos That Contain People&lt;/h2&gt;&lt;p&gt;The second cell adds a keyword filter on the video caption (&lt;code&gt;name&lt;/code&gt; field) to find clips likely to contain human faces. Only videos whose captions include words like &lt;code&gt;&amp;quot;woman&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;man&amp;quot;&lt;/code&gt;, &lt;code&gt;&amp;quot;person&amp;quot;&lt;/code&gt;, or &lt;code&gt;&amp;quot;face&amp;quot;&lt;/code&gt; are kept.&lt;/p&gt;&lt;!--CODE_BLOCK:python:cb-6--&gt;&lt;p&gt;&lt;strong&gt;Cell output:&lt;/strong&gt;&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-7--&gt;&lt;p&gt;This keyword approach is a fast, cheap heuristic - it will not catch every video containing a face, but it dramatically narrows the candidate pool before any expensive GPU inference runs.&lt;/p&gt;&lt;h2 id=&quot;step-4-cell-3-downloading-a-sample-video&quot;&gt;Step 4 - Cell 3: Downloading a Sample Video&lt;/h2&gt;&lt;p&gt;The third cell downloads the filtered video using &lt;code&gt;requests&lt;/code&gt; in streaming mode. Chunked downloading avoids loading the entire file into memory at once, which matters when working with many files.&lt;/p&gt;&lt;!--CODE_BLOCK:python:cb-8--&gt;&lt;p&gt;&lt;strong&gt;Cell output:&lt;/strong&gt;&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-9--&gt;&lt;h2 id=&quot;step-5-cell-4-verifying-the-video-with-opencv&quot;&gt;Step 5 - Cell 4: Verifying the Video with OpenCV&lt;/h2&gt;&lt;p&gt;Before committing GPU time to a file, this cell checks that OpenCV can open it and successfully read at least one frame. This guards against corrupt downloads and codec-incompatible files - both of which appear in real-world datasets.&lt;/p&gt;&lt;!--CODE_BLOCK:python:cb-10--&gt;&lt;p&gt;&lt;strong&gt;Cell output:&lt;/strong&gt;&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-11--&gt;&lt;p&gt;The tuple &lt;code&gt;(316, 600, 3)&lt;/code&gt; represents height, width, and the three BGR colour channels OpenCV uses by default. If &lt;code&gt;opened&lt;/code&gt; returns &lt;code&gt;False&lt;/code&gt;, the file is either missing, corrupt, or using an unsupported codec.&lt;/p&gt;&lt;h2 id=&quot;step-6-cell-5-running-the-face-detection-and-blur-loop&quot;&gt;Step 6 - Cell 5: Running the Face Detection and Blur Loop&lt;/h2&gt;&lt;p&gt;This is the core cell of the notebook. It processes every downloaded video file frame by frame - using MTCNN for face detection and OpenCV&amp;#39;s Gaussian blur for anonymisation - then writes each modified frame to a new output file.&lt;/p&gt;&lt;!--CODE_BLOCK:python:cb-12--&gt;&lt;p&gt;&lt;strong&gt;Cell output:&lt;/strong&gt;&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-13--&gt;&lt;p&gt;The &lt;code&gt;tqdm&lt;/code&gt; progress bar updates live in the notebook output area as each video is processed. Some videos emitted codec warnings to stderr - &lt;code&gt;Unable to read codec parameters&lt;/code&gt; and &lt;code&gt;moov atom not found&lt;/code&gt; - but these were caught by the &lt;code&gt;try/except&lt;/code&gt; block and did not interrupt the run.&lt;/p&gt;&lt;h3 id=&quot;understanding-the-key-parameters&quot;&gt;Understanding the Key Parameters&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;keep_all=True&lt;/code&gt;&lt;/strong&gt; tells MTCNN to return bounding boxes for every face in the frame, not just the highest-confidence one. This is essential for crowd scenes or any frame with more than one person.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;cv2.GaussianBlur(face, (51, 51), 30)&lt;/code&gt;&lt;/strong&gt; applies a Gaussian blur with a 51×51 kernel and standard deviation of 30. A larger kernel produces a heavier blur. The kernel dimensions must always be odd integers. This setting renders faces unrecognisable without leaving a visually jarring black rectangle over the region.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)&lt;/code&gt;&lt;/strong&gt; is required on every frame because OpenCV reads video as BGR by default, while MTCNN was trained on RGB images. Skipping this conversion leads to noticeably degraded detection accuracy.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;code&gt;cv2.VideoWriter_fourcc(*&amp;#39;mp4v&amp;#39;)&lt;/code&gt;&lt;/strong&gt; uses the MPEG-4 codec for output, which is broadly compatible across platforms. If you need H.264 output, replace &lt;code&gt;&amp;#39;mp4v&amp;#39;&lt;/code&gt; with &lt;code&gt;&amp;#39;avc1&amp;#39;&lt;/code&gt;, though availability depends on your OpenCV build.&lt;/p&gt;&lt;blockquote&gt;&lt;strong&gt;Warning: &lt;/strong&gt;If MTCNN returns a bounding box that partially falls outside the frame boundaries, slicing &lt;code&gt;frame[y1:y2, x1:x2]&lt;/code&gt; can produce an empty array. The &lt;code&gt;face.size &amp;gt; 0&lt;/code&gt; guard prevents a crash in this case.&lt;/blockquote&gt;&lt;h2 id=&quot;step-7-cell-6-archiving-the-output&quot;&gt;Step 7 - Cell 6: Archiving the Output&lt;/h2&gt;&lt;p&gt;The final cell zips the entire &lt;code&gt;blurred_videos&lt;/code&gt; directory into a single archive for easy download.&lt;/p&gt;&lt;!--CODE_BLOCK:python:cb-14--&gt;&lt;p&gt;&lt;strong&gt;Cell output:&lt;/strong&gt;&lt;/p&gt;&lt;!--CODE_BLOCK:text:cb-15--&gt;&lt;p&gt;This produces &lt;code&gt;blurred_videos.zip&lt;/code&gt; in the notebook&amp;#39;s working directory. You can download it directly from the JupyterLab file browser by right-clicking the file and selecting &lt;strong&gt;Download&lt;/strong&gt;.&lt;/p&gt;&lt;h2 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h2&gt;&lt;p&gt;In this tutorial, you walked through &lt;code&gt;faceblur_opencv.ipynb&lt;/code&gt; cell by cell - a Jupyter notebook running on Podstack&amp;#39;s &lt;strong&gt;PyTorch CUDA 12 + OpenCV&lt;/strong&gt; template. Across six cells, the notebook streamed a large video dataset, filtered for human-containing clips, downloaded and verified them, ran GPU-accelerated face detection with MTCNN, applied Gaussian blur to every detected face, and packaged the results for download. No local environment setup, no driver installation, and no infrastructure management was needed.&lt;/p&gt;&lt;h3 id=&quot;what-to-try-next&quot;&gt;What to Try Next&lt;/h3&gt;&lt;p&gt;To extend the notebook further, consider these improvements directly in new cells:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Skip frames. &lt;/strong&gt;At 30fps, consecutive frames are nearly identical. Running MTCNN every 3rd or 5th frame and reusing bounding boxes in between cuts inference time significantly.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Use MTCNN&amp;#39;s batch mode. &lt;/strong&gt;Pass a list of frames instead of one at a time to better saturate the GPU.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Try a faster detector. &lt;/strong&gt;YOLOv8-face and RetinaFace offer higher throughput than MTCNN if processing speed is the priority.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Process multiple videos in parallel. &lt;/strong&gt;Wrap the video loop in a &lt;code&gt;ThreadPoolExecutor&lt;/code&gt; to process several files concurrently.&lt;/li&gt;&lt;/ul&gt;&lt;h2 id=&quot;run-this-notebook-on-podstack&quot;&gt;Run This Notebook on Podstack &lt;/h2&gt;&lt;p&gt;This notebook was built and executed entirely on &lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;strong&gt;Podstack.ai&lt;/strong&gt;&lt;/a&gt; using the &lt;strong&gt;PyTorch CUDA 12 + OpenCV&lt;/strong&gt; template - no local CUDA setup, no driver headaches, no dependency conflicts. The pod was live and the notebook was running in under a minute.&lt;/p&gt;&lt;p&gt;To run it yourself:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Go to &lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;podstack.ai&lt;/a&gt; and create a free account&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Claim your joining bonus&lt;/strong&gt; - new users receive free GPU credits on sign-up&lt;/li&gt;&lt;li&gt;Launch a new pod using the &lt;strong&gt;PyTorch CUDA 12 + OpenCV&lt;/strong&gt; template&lt;/li&gt;&lt;li&gt;Upload &lt;code&gt;faceblur_opencv.ipynb&lt;/code&gt; via JupyterLab and run each cell from top to bottom&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;The Podstack template gallery also includes pre-built example notebooks for common computer vision tasks - object detection, image segmentation, video processing, and more - so you can explore and adapt them without starting from scratch.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;&lt;strong&gt;Get started on Podstack →&lt;/strong&gt;&lt;/a&gt;&lt;/p&gt;&lt;blockquote&gt;Don&amp;#39;t forget to claim your joining bonus when you sign up - it gives you free GPU credits to try out the notebook examples immediately, at no cost.&lt;/blockquote&gt;&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/daqmmqq3l/image/upload/v1778674363/podstack-blog/blurred_image_d7a8f33010.png&quot; alt=&quot;How To Blur Faces in Videos Using a Jupyter Notebook on Podstack&quot;/&gt;&lt;/p&gt;</content:encoded><category>Tutorials</category><category>Tutorial</category><category>PodStack</category><category>Python</category><category>OpenCV</category><category>MTCNN</category><category>Computer Vision</category><category>Jupyter Notebook</category><category>Machine Learning</category><author>Saurav Kumar</author></item><item><title>How To Fine-Tune an LLM with Unsloth Studio on Podstack</title><link>https://blog.podstack.ai/how-to-fine-tune-an-llm-with-unsloth-studio-on-podstack/</link><guid isPermaLink="true">https://blog.podstack.ai/how-to-fine-tune-an-llm-with-unsloth-studio-on-podstack/</guid><description>Learn how to fine-tune a large language model using Unsloth Studio on Podstack. This step-by-step tutorial covers deploying a one-click GPU pod, configuring a QLoRA run on TinyLlama, monitoring training, and exporting your fine-tuned model — no Python scripts required.</description><pubDate>Thu, 07 May 2026 18:30:00 GMT</pubDate><content:encoded>&lt;h2 id=&quot;introduction&quot;&gt;Introduction&lt;/h2&gt;&lt;p&gt;Fine-tuning a large language model (LLM) lets you adapt a general-purpose base model - like Llama, Mistral, or Qwen - to a specific task, domain, or style. Until recently, this required writing custom training scripts, managing CUDA dependencies, and renting expensive GPUs by the hour with no visibility into what your training run was actually doing.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://unsloth.ai/&quot; rel=&quot;noopener noreferrer&quot;&gt;Unsloth&lt;/a&gt; is an open-source library that makes LLM fine-tuning roughly 2x faster and uses 50–70% less memory than vanilla Hugging Face training, thanks to hand-written Triton kernels and aggressive memory optimizations. Unsloth Studio is the visual interface built on top of that library: a browser-based UI where you select a model, pick a dataset, configure hyperparameters, and watch training progress in real time - no Python scripts required.&lt;/p&gt;&lt;p&gt;In this tutorial, you will deploy an Unsloth Studio instance on Podstack using a one-click template, configure a QLoRA fine-tuning run on TinyLlama, and monitor the training process through the Studio dashboard. By the end, you will have a fine-tuned model adapter that you can export, deploy, or chat with directly inside the Studio.&lt;/p&gt;&lt;h2 id=&quot;prerequisites&quot;&gt;Prerequisites&lt;/h2&gt;&lt;p&gt;Before you begin, make sure you have:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;A Podstack account&lt;/strong&gt;. You can sign up at cloud.podstack.ai. New accounts come with credits to get started.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Basic familiarity with LLM concepts&lt;/strong&gt;. You should understand what a base model, dataset, and fine-tuning are at a conceptual level. You do not need to know PyTorch or Hugging Face APIs.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;An SSH key pair (optional)&lt;/strong&gt;. Only needed if you want command-line access to your pod. Notebook and Studio access work entirely through the browser.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;A Hugging Face account (optional)&lt;/strong&gt;. Required only if you want to use private datasets or push your trained adapter to the Hugging Face Hub.&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;step-1-spinning-up-an-unsloth-studio-pod-on-podstack&quot;&gt;Step 1 — Spinning Up an Unsloth Studio Pod on Podstack&lt;/h3&gt;&lt;p&gt;Podstack provides one-click templates for popular ML environments, including a pre-configured Unsloth Studio image with CUDA 13, the Unsloth library, and the Studio UI ready to go.&lt;/p&gt;&lt;p&gt;To deploy your pod, log in to &lt;a href=&quot;https://cloud.podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;https://cloud.podstack.ai&lt;/a&gt; and navigate to the Pods section in the left sidebar. Click Create Pod, then select the Unsloth Studio (CUDA 13) template from the marketplace.&lt;/p&gt;&lt;p&gt;Next, choose your GPU. Podstack offers a range of options - for this tutorial, an NVIDIA L40S (48 GB VRAM) is a good balance of price and capability. The L40S handles QLoRA fine-tuning on models up to 13B parameters comfortably, and it costs significantly less per hour than an H100. If you plan to fine-tune larger models or use full fine-tuning instead of QLoRA, consider an H100 or A100 instead.&lt;/p&gt;&lt;p&gt;After confirming the configuration, click Deploy. Your pod will be running within about 5 seconds.&lt;/p&gt;&lt;h3 id=&quot;step-2-accessing-your-pod&quot;&gt;Step 2 — Accessing Your Pod&lt;/h3&gt;&lt;p&gt;Once your pod is running, click on it from the Pods list to open the pod detail page. You will see four ways to access your environment:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Web Terminal&lt;/strong&gt; - an interactive shell directly in the browser, useful for running shell commands or installing extra packages.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;SSH Access&lt;/strong&gt; - a standard SSH command in the format&lt;em&gt; ssh -i ~/.ssh/&amp;lt;key_name&amp;gt; podstack@ssh-&amp;lt;id&amp;gt;.cloud.podstack.ai&lt;/em&gt;. Use this if you want to connect editors like VS Code Remote or Cursor to your pod.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Notebook Access &lt;/strong&gt;- a JupyterLab instance on a dedicated subdomain, protected by an auto-generated password.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Studio URL&lt;/strong&gt; - the Unsloth Studio web interface, also on its own subdomain.&lt;/p&gt;&lt;p&gt;The URL you want for this tutorial is the Studio URL, which will look something like &lt;u&gt;&lt;em&gt;https://&amp;lt;id&amp;gt;-8888.cloud.podstack.ai/studio.&lt;/em&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;&lt;em&gt;&lt;strong&gt;Important: The auto-generated password for notebook and Studio access is shown only once on the pod detail page. Copy it to a password manager before you leave the page. If you lose it, you can regenerate it from the same page.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&lt;p&gt;The right side of the pod detail page also shows live infrastructure stats - CPU, memory, storage, and GPU utilization. Keep this tab open during training to monitor your pod&amp;#39;s health independently of the Studio&amp;#39;s own GPU monitor.&lt;/p&gt;&lt;h3 id=&quot;step-3-configuring-your-first-fine-tuning-run&quot;&gt;Step 3 — Configuring Your First Fine-Tuning Run&lt;/h3&gt;&lt;p&gt;Open the Studio URL in your browser. You will see the Unsloth Studio interface with a left sidebar containing New Chat, Compare, Search, Train, Recipes, and Export.&lt;/p&gt;&lt;p&gt;Click Train to enter the Fine-tuning Studio. The main panel has three tabs: Configure, Current Run, and History. Start with Configure.&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Selecting a Base Model&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;n the model selector, choose &lt;u&gt;&lt;strong&gt;unsloth/tinyllama-bnb-4bit&lt;/strong&gt;&lt;/u&gt;. This is a pre-quantized 4-bit version of TinyLlama (1.1B parameters) - small enough to train quickly while still being a real LLM, which makes it ideal for learning the workflow.&lt;/p&gt;&lt;p&gt;For production work, Unsloth maintains pre-quantized 4-bit versions of most popular open models under the unsloth/ prefix on Hugging Face, including &lt;strong&gt;unsloth/llama-3.1-8b-bnb-4bit, unsloth/qwen2.5-7b-bnb-4bit, and unsloth/mistral-7b-v0.3-bnb-4bit&lt;/strong&gt;. All of these fit comfortably on an L40S with QLoRA.&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Choosing a Dataset&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;For the dataset, use &lt;u&gt;&lt;strong&gt;HuggingFaceH4/ultrachat_200k&lt;/strong&gt;&lt;/u&gt;. This is a standard supervised fine-tuning (SFT) dataset of 200,000 multi-turn conversations, widely used as a baseline for instruction tuning. Studio handles the chat template formatting automatically - you don&amp;#39;t need to manually concatenate user and assistant turns or insert special tokens.&lt;/p&gt;&lt;p&gt;If you have your &lt;strong&gt;own dataset&lt;/strong&gt;, you can either upload it directly to the pod or reference it by &lt;strong&gt;Hugging Face dataset ID&lt;/strong&gt;. The expected format is either a list of conversation turns or a prompt/completion pair structure.&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Selecting a Training Method&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;Choose &lt;strong&gt;QLoRA&lt;/strong&gt; as your training method. QLoRA quantizes the base model to 4-bit and trains small low-rank adapter matrices on top of it. This gives you most of the quality of full fine-tuning at a fraction of the memory cost - for TinyLlama, QLoRA uses under 4 GB of VRAM where full fine-tuning would need 20+ GB.&lt;/p&gt;&lt;p&gt;The other options are:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;LoRA&lt;/strong&gt; - same idea as QLoRA but without the 4-bit quantization. Use this if you have plenty of VRAM and want slightly higher quality.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Full fine-tune&lt;/strong&gt; - updates every parameter in the base model. Rarely worth it unless you have a specific reason and a lot of VRAM.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;Setting Hyperparameters&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;The defaults Unsloth Studio picks are sensible for most fine-tuning runs:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Learning rate: 2e-4&lt;/strong&gt; - standard for QLoRA. Lower it to 1e-4 if your loss is unstable.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;LoRA rank: 16 -&lt;/strong&gt; controls adapter capacity. Increase to 32 or 64 for more domain shift.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;LoRA alpha: 16 -&lt;/strong&gt; typically set equal to rank.&lt;/li&gt;&lt;li&gt;Dropout: 0 - Unsloth&amp;#39;s optimizations work best with no dropout.&lt;/li&gt;&lt;li&gt;Batch size: 2 with gradient accumulation: 4 - gives an effective batch size of 8.&lt;/li&gt;&lt;li&gt;Epochs: 1 - UltraChat is large enough that one epoch is plenty.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For your first run, accept the defaults. You can always tune later once you understand how a baseline run behaves.&lt;/p&gt;&lt;h3 id=&quot;step-4-starting-the-run-and-reading-the-dashboard&quot;&gt;Step 4 — Starting the Run and Reading the Dashboard&lt;/h3&gt;&lt;p&gt;Click Start Training. Studio switches to the Current Run tab and the dashboard goes live.&lt;/p&gt;&lt;p&gt;Across the top, you&amp;#39;ll see the live training stats:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Step counter showing current step out of total (e.g., Step 15 / 19476)&lt;/li&gt;&lt;li&gt;Loss - the training loss for the current batch&lt;/li&gt;&lt;li&gt;LR - current learning rate&lt;/li&gt;&lt;li&gt;Grad Norm - gradient magnitude after clipping&lt;/li&gt;&lt;li&gt;Model and Method for reference&lt;/li&gt;&lt;li&gt;Throughput - steps per second and total tokens processed&lt;/li&gt;&lt;li&gt;ETA - estimated time remaining&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Below that are four real-time charts: Training Loss, Gradient Norm, Learning Rate schedule, and Eval Loss.&lt;/p&gt;&lt;p&gt;On the right is the GPU Monitor, which shows live values for utilization, VRAM usage, temperature, and power draw. After a minute of training on the L40S, you should expect to see something like:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Utilization: 95–100% - the GPU is the bottleneck, which is what you want&lt;/li&gt;&lt;li&gt;VRAM: ~4 / 45 GB for TinyLlama in 4-bit (you have plenty of headroom for larger models or batch sizes)&lt;/li&gt;&lt;li&gt;Temperature: 60–75°C - normal operating range&lt;/li&gt;&lt;li&gt;Power: 320–340 / 350 W - near the power cap, indicating the kernels are fully loaded&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;If utilization is sitting at 40%, your dataloader is the bottleneck - increase the number of workers or batch size. If VRAM is at 95%, you&amp;#39;re one OOM crash away from a failed run - reduce batch size or gradient accumulation.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;u&gt;&lt;strong&gt;What a Healthy Loss Curve Looks Like&lt;/strong&gt;&lt;/u&gt;&lt;/p&gt;&lt;p&gt;For a healthy QLoRA run, you should see:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;Training loss trending down smoothly&lt;/strong&gt;. For TinyLlama on UltraChat, expect to start around 1.4–1.5 and drop to 1.2–1.3 within the first 50 steps, then continue declining slowly.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Gradient norm&lt;/strong&gt; stable in the 0.1–0.5 range, with occasional spikes that get clipped. Persistent climbing grad norm means the run is diverging — stop and lower the learning rate.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Learning rate&lt;/strong&gt; following whatever schedule you configured (linear warmup then cosine decay by default).&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Eval loss&lt;/strong&gt; tracking training loss with a small gap. A growing gap means overfitting; if it appears, stop early or reduce epochs.&lt;/li&gt;&lt;/ul&gt;&lt;h3 id=&quot;step-5-iterating-comparing-and-exporting&quot;&gt;Step 5 — Iterating, Comparing, and Exporting&lt;/h3&gt;&lt;p&gt;Long fine-tuning runs are usually wasteful. The honest workflow is:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Subsample your dataset to 5,000–20,000 examples&lt;/li&gt;&lt;li&gt;Train for 30–60 minutes&lt;/li&gt;&lt;li&gt;Evaluate the result in Studio&amp;#39;s chat interface (left sidebar → New Chat)&lt;/li&gt;&lt;li&gt;If the model behaves as you want, scale up to the full dataset&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;strong&gt;Studio&amp;#39;s Recipes&lt;/strong&gt; tab (left sidebar) lets you save configurations and re-run them later - useful for hyperparameter sweeps. The Compare tab lets you diff two runs side by side, which is far easier than digging through Weights &amp;amp; Biases logs.&lt;/p&gt;&lt;p&gt;When you&amp;#39;re happy with a run, go to Export. You have three options:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;strong&gt;Push to Hugging Face Hub&lt;/strong&gt; - uploads your adapter to a private or public repo&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Save as GGUF&lt;/strong&gt; - quantizes the merged model for use with llama.cpp and Ollama&lt;/li&gt;&lt;li&gt;&lt;strong&gt;Merge LoRA into base&lt;/strong&gt; - produces a standalone fine-tuned model in safetensors format&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;For most production deployments, GGUF is what you want - it runs efficiently on CPUs and consumer GPUs.&lt;/p&gt;&lt;h3 id=&quot;conclusion&quot;&gt;Conclusion&lt;/h3&gt;&lt;p&gt;In this tutorial, you deployed Unsloth Studio on a Podstack GPU pod, configured a QLoRA fine-tuning run on TinyLlama, and learned how to read the Studio dashboard to evaluate training health. You also saw how to iterate on runs, compare configurations, and export your fine-tuned model.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The broader takeaway:&lt;/strong&gt; LLM fine-tuning has gone from a multi-day infrastructure project to a workflow you can complete in an afternoon. Unsloth made the kernels fast, QLoRA made the memory cheap, pre-quantized models made setup trivial, and Studio removed the training script entirely. Paired with per-minute GPU pricing on Podstack, the cost of trying a fine-tuning idea is now small enough that the only real bottleneck is whether you have a dataset worth training on.&lt;/p&gt;&lt;p&gt;Ready to train your own model? Head to &lt;a href=&quot;https://podstack.ai&quot; rel=&quot;noopener noreferrer&quot;&gt;https://podstack.ai&lt;/a&gt; - &lt;strong&gt;claim your joining bonus&lt;/strong&gt;, spin up an Unsloth Studio instance using our one-click template, and you&amp;#39;ll be fine-tuning within seconds.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;For deeper exploration, see:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;a href=&quot;https://docs.unsloth.ai/&quot; rel=&quot;noopener noreferrer&quot;&gt;Unsloth documentation &lt;/a&gt;for advanced configuration and supported models &lt;/li&gt;&lt;/ol&gt;&lt;p&gt; 2. &lt;a href=&quot;https://arxiv.org/abs/2305.14314&quot; rel=&quot;noopener noreferrer&quot;&gt;QLoRA paper &lt;/a&gt;for the theoretical background on 4-bit fine-tuning&lt;/p&gt;&lt;p&gt; 3. &lt;a href=&quot;https://huggingface.co/datasets&quot; rel=&quot;noopener noreferrer&quot;&gt;Hugging Face datasets&lt;/a&gt; hub for finding training data&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/daqmmqq3l/image/upload/v1778236886/podstack-blog/Screenshot_2026_05_08_at_3_52_22_PM_a8c7d63ec4.png&quot; alt=&quot;How To Fine-Tune an LLM with Unsloth Studio on Podstack&quot;/&gt;&lt;/p&gt;</content:encoded><category>Unsloth</category><category>Llm</category><category>Fine Tuning</category><category>QLora</category><category>Cloud GPU</category><category>Tutorial</category><category>TinyLlama</category><category>Machine Learning</category><author>Saurav Kumar</author></item><item><title>Is AI Infrastructure the New EV - Already Obsolete?</title><link>https://blog.podstack.ai/ai-infrastructure-obsolescence-ev-comparison/</link><guid isPermaLink="true">https://blog.podstack.ai/ai-infrastructure-obsolescence-ev-comparison/</guid><description>AI hardware generations turn over every 18 months. But the real risk isn&apos;t that the chips stop working - it&apos;s that the economics shift underneath you before your depreciation schedule catches up.</description><pubDate>Wed, 06 May 2026 18:30:00 GMT</pubDate><content:encoded>&lt;p&gt;Every generation, a new technology earns the label of &amp;quot;stranded asset.&amp;quot; Electric vehicles rewrote the calculus for gas-station networks. Streaming obsoleted the DVD rental industry overnight. Now the question is whether the billions being poured into AI data centers share the same fate.&lt;/p&gt;&lt;p&gt;The analogy to EV technology is seductive. Both sectors feature hardware generations that compress years of improvement into months. Both have seen incumbents scramble to retrofit old infrastructure for new demands. And both carry the uncomfortable possibility that today&amp;#39;s flagship investment is tomorrow&amp;#39;s liability.&lt;/p&gt;&lt;p&gt;But the analogy frays under scrutiny - and understanding exactly where it breaks down is key.&lt;/p&gt;&lt;h2 id=&quot;where-the-comparison-holds&quot;&gt;Where the Comparison Holds&lt;/h2&gt;&lt;p&gt;Nvidia&amp;#39;s GPU roadmap is the clearest proxy. The A100 (2020) was the undisputed training champion. Within two years, the H100 made it economically inferior. The H200 followed. The B200 is now state-of-the-art - on an 18-month cadence that shows no signs of slowing.&lt;/p&gt;&lt;p&gt;For organizations that purchased AI compute on a CapEx basis - building private data centers, buying physical racks - this pace represents genuine obsolescence risk. Not because the hardware stops working, but because training next-generation models demands architectures it cannot support.&lt;/p&gt;&lt;p&gt;Power infrastructure compounds this. As model training pushes toward gigawatt-scale consumption, data centers built for earlier power densities face retrofit costs that rival the original investment.&lt;/p&gt;&lt;h2 id=&quot;where-the-ev-analogy-breaks-down&quot;&gt;Where the EV Analogy Breaks Down&lt;/h2&gt;&lt;p&gt;Unlike an EV battery pack - a physical assembly that cannot be firmware-updated into a different chemistry - AI infrastructure is fundamentally software-defined. The same GPU cluster that trained a model in 2023 can run inference workloads in 2026. The compute doesn&amp;#39;t expire; it gets redeployed.&lt;/p&gt;&lt;p&gt;More importantly, the dominant model of AI infrastructure consumption is cloud-based OpEx, not on-premises CapEx. When AWS or Azure absorbs the hardware refresh cycle, the enterprise customer is insulated from the churn. What was existential for the gas station owner is a rounding error for the driver paying at the pump.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Hidden Obsolescence: Economic, Not Physical&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;The subtler and more dangerous form of obsolescence is economic, not physical. Older chips don&amp;#39;t stop functioning - they become uncompetitive. H100 clusters get repriced into inference workloads where their cost-per-token still makes sense.&lt;/p&gt;&lt;p&gt;But for organizations sized around CapEx models - sovereign AI initiatives, startups that bought rather than rented - the math is unforgiving. The next model generation requires 5–10x the compute of the previous one. If your infrastructure can&amp;#39;t scale, you&amp;#39;re running yesterday&amp;#39;s AI at today&amp;#39;s prices.&lt;/p&gt;&lt;p&gt;This is the gas-station-in-2015 problem. The station wasn&amp;#39;t broken. The economics were broken.&lt;/p&gt;&lt;h2 id=&quot;who-is-actually-exposed&quot;&gt;Who Is Actually Exposed?&lt;/h2&gt;&lt;p&gt;The exposure is concentrated. Cloud-native organizations consuming AI as a service carry minimal direct risk - their providers absorb the generational churn. The exposed parties are those who made large, fixed bets on specific hardware: governments building sovereign AI capacity, enterprises running private AI clouds, and the hyperscalers themselves.&lt;/p&gt;&lt;p&gt;The hyperscalers aren&amp;#39;t naive about this. Microsoft, Google, and Amazon structure hardware procurement as a rolling refresh - never fully committed to one generation, always hedging into the next.&lt;/p&gt;&lt;h2 id=&quot;the-correct-mental-model&quot;&gt;The Correct Mental Model&lt;/h2&gt;&lt;p&gt;The most accurate frame isn&amp;#39;t EV batteries - it&amp;#39;s semiconductor fabs. A fab built for 28nm didn&amp;#39;t break when 7nm arrived. It became economically inferior for some workloads and superior for others. The asset didn&amp;#39;t disappear; it found its level in a tiered market.&lt;/p&gt;&lt;p&gt;AI infrastructure will follow the same pattern. H100 clusters become inference workhorses. A100s handle fine-tuning. The cutting edge advances; the previous generation reprices, not vanishes.&lt;/p&gt;&lt;p&gt;The risk is not obsolescence in the EV sense. The risk is being caught holding a CapEx position the market reprices faster than your depreciation schedule. That&amp;#39;s a financial risk masquerading as a technology risk - and it requires sophisticated hedging, not panic and not complacency.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/daqmmqq3l/image/upload/v1778142980/podstack-blog/image_8733752bb0.png&quot; alt=&quot;Is AI Infrastructure the New EV - Already Obsolete?&quot;/&gt;&lt;/p&gt;</content:encoded><category>AI &amp; Technology</category><category>AI infrastructure</category><category>Cloud GPU</category><category>CapEx</category><category>Cloud Computing</category><category>Nvidia</category><category>Data Centers</category><category>Tech Analysis</category><author>Saurav Kumar</author></item><item><title>Podstack vs. Runpod vs. CoreWeave: Which Cloud GPU Platform Should You Choose in 2026?</title><link>https://blog.podstack.ai/podstack-vs-runpod-vs-coreweave/</link><guid isPermaLink="true">https://blog.podstack.ai/podstack-vs-runpod-vs-coreweave/</guid><description>Runpod, CoreWeave, and Podstack are often compared but serve very different users. We break down GPU selection, pricing, deployment, compliance, and community to help you pick the right cloud GPU platform for your AI workloads.</description><pubDate>Tue, 05 May 2026 18:30:00 GMT</pubDate><content:encoded>&lt;p&gt;The cloud GPU market has matured rapidly, and &amp;quot;just rent an H100&amp;quot; is no longer the simple decision it sounds like. Pricing models, regional availability, data residency, deployment workflows, and target audiences all vary dramatically between providers - and the right choice depends as much on&lt;em&gt; who you are as on what you&amp;#39;re building&lt;/em&gt;.&lt;/p&gt;&lt;p&gt;Three platforms come up repeatedly in conversations about GPU infrastructure: &lt;strong&gt;Runpod, CoreWeave, and Podstack&lt;/strong&gt;. They&amp;#39;re often grouped together, but they&amp;#39;re aimed at very different users. Runpod is the developer-first, globally available GPU cloud built for fast iteration. CoreWeave is the AI-native hyperscaler powering frontier labs like OpenAI and Mistral. Podstack is India&amp;#39;s sovereign GPU cloud, purpose-built for teams that need INR billing, data residency inside Indian data centers, and DPDP compliance.&lt;/p&gt;&lt;p&gt;This guide breaks down how each platform compares across GPU performance, pricing, deployment experience, customizability, integrations, compliance, and community - so you can pick the one that actually fits your workload.&lt;/p&gt;&lt;h2 id=&quot;platform-overview&quot;&gt;Platform Overview&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Runpod&lt;/strong&gt; launched in 2022 and has become the go-to choice for AI developers, researchers, and startups who want to spin up GPUs in seconds and only pay for what they use. It runs across 30+ global regions through a mix of Secure Cloud (professional data centers) and Community Cloud (vetted providers), supports more than 30 GPU SKUs from RTX 4090s up to B200s, and bills per minute. The whole platform is designed to remove infrastructure friction so you can focus on shipping models.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CoreWeave&lt;/strong&gt; has been in the GPU game since 2017 and now positions itself as an &amp;quot;AI-native&amp;quot; hyperscaler. It&amp;#39;s the infrastructure of choice for OpenAI, Mistral AI, and IBM&amp;#39;s Granite models. CoreWeave runs a Kubernetes-native platform optimized for massive multi-node training clusters, with bare-metal infrastructure, InfiniBand networking, and managed lifecycle services. It&amp;#39;s powerful - and clearly aimed at enterprises and frontier labs that have predictable, large-scale compute needs and procurement teams to match.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Podstack&lt;/strong&gt; is the newest entrant of the three, founded in 2024 by ex-Oracle engineers (with backgrounds spanning IIT Kharagpur, IIM Lucknow, and IIIT Bengaluru, including a Docker Captain, CNCF Ambassador, and Google Developer Expert). Podstack positions itself explicitly as &amp;quot;the RunPod of India&amp;quot; - a sovereign GPU cloud running entirely inside Indian data centers, with INR billing, zero egress fees, ISO 27001 certification, and DPDP (Digital Personal Data Protection Act) compliance. It offers NVIDIA L40S, A100, and H100 GPUs from ₹92/hour with pay-per-second billing, plus a proprietary PodVirt platform for fractional GPU allocation.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;In short:&lt;/strong&gt; Runpod is built for global developer agility, CoreWeave for enterprise-scale AI infrastructure, and Podstack for teams that need compliance, data residency and currency-native billing.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;h2 id=&quot;gpu-selection-and-performance&quot;&gt;GPU Selection and Performance&lt;/h2&gt;&lt;p&gt;All three platforms run NVIDIA&amp;#39;s serious AI hardware, but the depth of catalog and target SKUs differ.&lt;/p&gt;&lt;p&gt;Runpod offers the broadest spread - 30+ GPU types covering everything from RTX 4000 (16GB) for tiny inference jobs up through 4090s, L40/L40S, A6000, A100 (40GB and 80GB), H100, H200, and B200. That range matters because not every workload needs an H100. A Stable Diffusion fine-tune runs beautifully on a 4090 at a fraction of the price. A 7B model inference job is wasted on an H100. Runpod lets you right-size, and new GPUs roll out as soon as NVIDIA ships them.&lt;/p&gt;&lt;p&gt;CoreWeave focuses on data-center-grade GPUs: A40, A6000, A100, H100, H200, GB200, and B200, typically in multi-GPU SXM configurations with NVLink and InfiniBand interconnects. If you&amp;#39;re training a 70B+ parameter model across 64+ GPUs and need every byte of bisection bandwidth, this is the kind of stack you want. Consumer GPUs like the 4090 generally aren&amp;#39;t part of the catalog - CoreWeave isn&amp;#39;t trying to serve hobbyists.&lt;/p&gt;&lt;p&gt;Podstack offers a focused but practical catalog: NVIDIA L40S (48GB), A100 (40/80GB), and H100. The L40S in particular is interesting for Indian teams - it&amp;#39;s a strong inference and fine-tuning GPU at a much lower price point than an H100, and it&amp;#39;s available with INR billing and no cross-border data transfer concerns. Podstack&amp;#39;s PodVirt platform also enables fractional GPU allocation, so you can rent a slice of an A100 or H100 instead of paying for a whole card when you don&amp;#39;t need it - useful for cost-sensitive experimentation.&lt;/p&gt;&lt;p&gt;For raw single-GPU performance, an A100 is an A100 regardless of provider. The differentiator is which GPUs are available, &lt;em&gt;how quickly&lt;/em&gt; you can get one, and where the silicon physically sits.&lt;/p&gt;&lt;h2 id=&quot;pricing-and-cost-efficiency&quot;&gt;Pricing and Cost Efficiency&lt;/h2&gt;&lt;p&gt;Pricing is where the three platforms diverge most clearly, because they&amp;#39;re priced for different customers.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Runpod&lt;/strong&gt; publishes transparent on-demand rates and bills by the millisecond with no commitments. Recent published rates include H100 PRO around $1.90/hr, A100 80GB around $1.79/hr, L40S around $1.22/hr, RTX 4090 around $0.69/hr, and entry-level cards under $0.40/hr. There&amp;#39;s no charge for ingress or egress, no minimum spend, and you can stop a pod the moment your job finishes. For bursty workloads — generating a few hundred images, fine-tuning a small model overnight, prototyping a new architecture — this is hard to beat.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CoreWeave&amp;#39;s&lt;/strong&gt; pricing is largely contract-driven for serious customers. They offer reserved capacity, multi-month commitments, and SLA-backed pricing that can be very competitive at scale (especially against AWS, GCP, and Azure for the same hardware). On-demand rates exist but the platform is really optimized for teams that know they&amp;#39;ll burn millions of GPU-hours and want to lock in capacity. If you&amp;#39;re doing a one-off weekend project, CoreWeave isn&amp;#39;t structured to make that easy or cheap.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Podstack&lt;/strong&gt; lists rates starting from ₹100/hour  for L40S (roughly $1.10 USD at current exchange rates, depending on the GPU tier) with pay-per-second billing and zero egress fees. For Indian teams, the bigger story is currency and compliance: paying in INR removes FX volatility from your cost forecasting, GST is handled cleanly for Indian tax purposes, and there&amp;#39;s no surprise bill from data leaving the country. Fractional GPU allocation through PodVirt also means you can run development workloads on a slice of an A100 for a fraction of the full-card cost.&lt;/p&gt;&lt;p&gt;The right comparison really depends on your situation. A US-based startup doing iterative ML work will almost always find Runpod cheapest in practice. A frontier lab doing a 6-month pre-training run will probably get the best per-hour rate from CoreWeave on a reserved contract. An Indian team building a domestic AI product where customer data can&amp;#39;t leave the country will find Podstack uniquely positioned - the others can&amp;#39;t legally serve that workload the same way.&lt;/p&gt;&lt;h2 id=&quot;deployment-experience-and-ease-of-use&quot;&gt;Deployment Experience and Ease of Use&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Runpod&amp;#39;s&lt;/strong&gt; deployment model is built around speed. You pick a GPU, pick a template (or bring your own container), and click deploy. FlashBoot technology gets pods cold-starting in seconds, and the Hub has pre-configured templates for PyTorch, TensorFlow, ComfyUI, vLLM, Stable Diffusion Web UI, and dozens of other common frameworks. JupyterLab, SSH, and persistent volumes are all available with no infrastructure work on your part. Someone with no Kubernetes experience can have a model running in under five minutes.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CoreWeave&lt;/strong&gt; is Kubernetes-native by design. That&amp;#39;s a feature if you&amp;#39;re an infrastructure team that already speaks Kubernetes - you get fine-grained control over scheduling, networking, storage classes, and orchestration, and you can integrate cleanly with existing GitOps workflows. It&amp;#39;s a steeper learning curve if you don&amp;#39;t. There&amp;#39;s no one-click &amp;quot;launch Stable Diffusion&amp;quot; button on CoreWeave; you&amp;#39;re expected to bring your own manifests, Helm charts, or container definitions. The payoff is total control and production-grade orchestration.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Podstack&lt;/strong&gt; sits closer to Runpod on the ease-of-use spectrum. It offers Pods, VMs, and serverless inference, plus a Python SDK and CLI for programmatic control. The platform is explicitly designed to feel familiar to developers coming from Runpod (the comparison is right in their marketing), with quick provisioning and pre-built environments. The fractional GPU allocation through PodVirt is the standout proprietary capability - useful when you want development workloads on a slice of an expensive card without spinning up a full instance.&lt;/p&gt;&lt;p&gt;For most individual developers and small teams, the experience hierarchy is: Runpod and Podstack are smooth and fast; CoreWeave is powerful but requires real DevOps muscle.&lt;/p&gt;&lt;h2 id=&quot;compliance-data-residency-and-sovereignty&quot;&gt;Compliance, Data Residency, and Sovereignty&lt;/h2&gt;&lt;p&gt;This is the dimension that has changed the most in the last two years, and it&amp;#39;s where Podstack carves out its clearest advantage.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Runpod&lt;/strong&gt; operates Secure Cloud data centers across 31 global regions and is SOC 2 Type II compliant. It&amp;#39;s a strong fit for international teams and offers HIPAA-aligned options. Data can be pinned to specific regions, but the platform is fundamentally a global network — appropriate for most international AI workloads but not specifically tailored to any single country&amp;#39;s data sovereignty requirements.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CoreWeave&lt;/strong&gt; operates a growing footprint of US and European data centers and offers enterprise-grade compliance (SOC 2, HIPAA, etc.). It&amp;#39;s well-suited to large US and EU enterprises but doesn&amp;#39;t currently market itself as a sovereign cloud for any specific non-Western jurisdiction.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Podstack&lt;/strong&gt; runs entirely inside&lt;strong&gt; Indian data centers&lt;/strong&gt; and is built around Indian regulatory requirements - DPDP Act compliance, ISO 27001 certification, GST-compliant INR invoicing, and zero cross-border data transfer for compute and storage. For Indian banks, healthcare companies, government-adjacent AI projects, or any team working with data that must remain within Indian borders, this isn&amp;#39;t a nice-to-have - it&amp;#39;s the whole reason to pick a provider. The IndiaAI mission and the broader push toward sovereign compute make this category increasingly important.&lt;/p&gt;&lt;p&gt;If your data has no jurisdictional constraints, Runpod or CoreWeave will serve you well. If you&amp;#39;re building for the Indian market and need data residency, Podstack is in a category of one among the three. With Podstack plans to create soverign cloud in Dubai and South Asian countries as a part of expansion further provides soverign cloud to those regions.&lt;/p&gt;&lt;h2 id=&quot;customizability-and-integration&quot;&gt;Customizability and Integration&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Runpod&lt;/strong&gt; ships REST APIs, SDKs, and serverless inference endpoints designed specifically for AI workflows. You can launch pods programmatically, deploy models as auto-scaling endpoints, integrate with Hugging Face for model pulls, hook into Weights &amp;amp; Biases for experiment tracking, and build full applications around its API surface without ever touching Kubernetes. The platform is opinionated toward AI-specific workflows - if you want to deploy a Stable Diffusion endpoint and call it via HTTP from your app, that&amp;#39;s a documented path with templates.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CoreWeave&lt;/strong&gt; gives you infrastructure primitives. APIs, Terraform providers, Kubernetes operators, and bare-metal access let you build whatever you want — including production-grade multi-region inference platforms with custom networking and storage. The trade-off is that you&amp;#39;re building it. There&amp;#39;s no managed &amp;quot;Stable Diffusion API&amp;quot; service; you&amp;#39;re constructing those higher-level abstractions yourself on top of CoreWeave&amp;#39;s compute and orchestration.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Podstack&lt;/strong&gt; provides a Python SDK, CLI, and REST APIs for managing pods, VMs, and serverless inference. It&amp;#39;s designed to be programmatically accessible from the start, with templates for ComfyUI, Unsloth fine-tuning, vLLM, and other common AI tooling. The serverless inference offering pairs nicely with the L40S for cost-effective production endpoints. For Indian developers integrating AI into domestic products, the combination of INR billing, local-currency invoicing, and AI-native APIs reduces friction substantially.&lt;/p&gt;&lt;h2 id=&quot;community-and-support&quot;&gt;Community and Support&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Runpod&lt;/strong&gt; has cultivated an active, public community - a large Discord server where users swap tips and templates, public tutorials and blog posts, and 24/7 support across all tiers. The community feel is one of the platform&amp;#39;s quieter strengths; if you hit a weird issue with a specific model, someone has probably already posted about it.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;CoreWeave&amp;#39;s&lt;/strong&gt; support model is enterprise-style: dedicated account contacts for major customers, ticket-based support, and deep technical engineering relationships for the labs they serve. There&amp;#39;s no widely-known public community forum, because their customer base mostly doesn&amp;#39;t need one. Documentation is solid; community discussion is mostly absent.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Podstack&lt;/strong&gt; is younger and its community is still forming. The founding team&amp;#39;s public profile (Docker Captain, CNCF Ambassador, Google Developer Expert) brings credibility and visibility in the cloud-native and Indian developer communities, and the company is active in the local AI ecosystem. For Indian developers, having founders who speak the local market and respond directly to feedback is genuinely useful.&lt;/p&gt;&lt;h2 id=&quot;which-platform-fits-which-workload&quot;&gt;Which Platform Fits Which Workload&lt;/h2&gt;&lt;p&gt;A quick decision guide:&lt;/p&gt;&lt;p&gt;If you&amp;#39;re an individual developer, researcher, hobbyist, or a startup anywhere in the world that wants the broadest GPU selection, the fastest deployment, the most transparent pay-as-you-go pricing, and an active community to lean on, Runpod is the natural choice. It scales from your first weekend project up through production inference at thousands of requests per second, and you don&amp;#39;t need a procurement department to use it.&lt;/p&gt;&lt;p&gt;If you&amp;#39;re a frontier AI lab, a large enterprise running sustained training workloads, or any team that needs Kubernetes-native orchestration, multi-thousand-GPU clusters, InfiniBand networking, and SLA-backed contract pricing - and you have the infrastructure team to operate at that level - CoreWeave is built for you.&lt;/p&gt;&lt;p&gt;If you&amp;#39;re an Indian AI team, an enterprise that must keep data inside Indian borders, a regulated industry working under DPDP requirements, or a startup that wants INR billing and zero FX risk, Podstack is the only one of the three actually designed for your constraints. The L40S availability, fractional GPU allocation, and ISO 27001 + DPDP compliance package addresses real, jurisdictionally-specific problems that the global platforms can&amp;#39;t solve as cleanly.&lt;/p&gt;&lt;p&gt;These three aren&amp;#39;t really competing for the same customer - they&amp;#39;re each strongest where the others are weakest. Runpod owns global developer agility. CoreWeave owns enterprise scale. Podstack owns Indian sovereignty. Pick the one whose center of gravity matches yours.&lt;/p&gt;&lt;h2 id=&quot;faq&quot;&gt;FAQ&lt;/h2&gt;&lt;p&gt;&lt;strong&gt;Q: Can I run Stable Diffusion or fine-tune an LLM on all three platforms?&lt;/strong&gt;
A: Yes. All three offer GPUs with sufficient VRAM (24GB+) for image generation and small-to-medium LLM fine-tuning. Runpod has the most pre-built templates for these workflows, Podstack has L40S options that are particularly good for inference and fine-tuning at lower cost, and CoreWeave will handle them at scale though with more setup work.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Q: Which platform is cheapest for a one-off project?&lt;/strong&gt;
A: Runpod&amp;#39;s per-second billing and broad GPU range typically make it cheapest for short, intermittent jobs globally. &lt;strong&gt;For Indian teams, Podstack&amp;#39;s INR billing and zero egress can come out lower in practice once FX and bandwidth costs are included. &lt;/strong&gt;CoreWeave is generally not optimized for one-off projects.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Q: Do I need Kubernetes knowledge?&lt;/strong&gt;
A: For Runpod, no - the platform abstracts containers behind a simple UI and templates. For Podstack, no - the SDK and CLI are designed for direct developer use. For CoreWeave, yes - Kubernetes fluency is essentially required to use the platform effectively.&lt;/p&gt;&lt;p&gt;
&lt;strong&gt;Q: What if my data has to stay in India?&lt;/strong&gt;
A: Podstack is the only one of these three that runs entirely inside Indian data centers with DPDP compliance, INR billing, and zero cross-border data transfer. Runpod and CoreWeave both have global footprints but aren&amp;#39;t structured around Indian data sovereignty requirements.&lt;/p&gt;&lt;p&gt;
&lt;strong&gt;Q: Which is best for production inference at scale?&lt;/strong&gt;
A: All three can do it. Runpod&amp;#39;s serverless inference with auto-scaling endpoints is the fastest path for most teams. CoreWeave is best for very large-scale production deployments where you need fine-grained orchestration. Podstack&amp;#39;s serverless inference with L40S GPUs is excellent for production inference targeting Indian users with low latency.&lt;/p&gt;&lt;p&gt;
&lt;strong&gt;Q: What about fractional GPUs?&lt;/strong&gt;
A: Podstack&amp;#39;s PodVirt platform offers fractional GPU allocation as a core feature, useful for cost-controlled development. Runpod offers smaller GPUs and community cloud options that achieve similar cost-efficiency. CoreWeave is generally focused on full-GPU and multi-GPU configurations rather than fractional allocation.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/daqmmqq3l/image/upload/v1778053165/podstack-blog/blog_cover_1200x630_42135d4324.png&quot; alt=&quot;Podstack vs. Runpod vs. CoreWeave: Which Cloud GPU Platform Should You Choose in 2026?&quot;/&gt;&lt;/p&gt;</content:encoded><category>GPU Cloud</category><category>Runpod</category><category>CoreWeave</category><category>PodStack</category><category>Cloud GPU</category><category>GPU comparison</category><category>AI infrastructure</category><category>Sovereign Cloud</category><category>H100</category><author>Saurav Kumar</author></item><item><title>Why Per-Second GPU Billing Saves Indian Startups 40–60% on Inference (With Real Math)</title><link>https://blog.podstack.ai/per-second-gpu-billing-saves-indian-startups-inference-cost/</link><guid isPermaLink="true">https://blog.podstack.ai/per-second-gpu-billing-saves-indian-startups-inference-cost/</guid><description>Hourly GPU billing burns 40–60% of your inference budget on idle time. We break down four real Indian startup workloads - bursty inference, RAG, batch jobs, and serverless APIs - with rupee-level math that proves per-second billing isn&apos;t a feature. It&apos;s a survival tool.</description><pubDate>Mon, 04 May 2026 09:51:00 GMT</pubDate><content:encoded>&lt;p&gt;Every Indian AI founder I&amp;#39;ve spoken to in the last six months has the same complaint: &amp;quot;&lt;em&gt;Our cloud bill is killing us, and most of it isn&amp;#39;t even the work we&amp;#39;re doing - it&amp;#39;s the idle time we&amp;#39;re paying for.&lt;/em&gt;&amp;quot;&lt;/p&gt;&lt;p&gt;They&amp;#39;re right. And the math, once you actually run it, is brutal.&lt;/p&gt;&lt;p&gt;If you&amp;#39;re running inference on hourly-billed GPUs, you are very likely paying 2x to 3x more than you need to. Not because you picked the wrong GPU. Not because your model is inefficient. But because the billing model itself is wrong for your workload.&lt;/p&gt;&lt;p&gt;This post shows you exactly where the money leaks, with four real workload patterns and rupee-level math. By the end, you&amp;#39;ll know whether per-second billing actually applies to your stack - or whether hourly is fine.&lt;/p&gt;&lt;p&gt;No hand-waving. No &amp;quot;up to 90% savings!&amp;quot; marketing. Just numbers.&lt;/p&gt;&lt;h2 id=&quot;the-core-problem-gpu-inference-is-bursty-but-hourly-billing-isnt&quot;&gt;The Core Problem: GPU Inference Is Bursty, But Hourly Billing Isn&amp;#39;t&lt;/h2&gt;&lt;p&gt;Training is a long, predictable workload. You spin up a GPU, run for 6–48 hours, spin it down. Hourly billing works fine here because your utilization is close to 100%.&lt;/p&gt;&lt;p&gt;Inference is the opposite. Inference traffic is spiky, unpredictable, and full of dead air:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A user sends a prompt. Your model runs for 3 seconds. Then nothing for 47 seconds.&lt;/li&gt;&lt;li&gt;A scheduled batch job runs for 8 minutes at 2 AM. The GPU sits idle the other 23 hours and 52 minutes.&lt;/li&gt;&lt;li&gt;A RAG pipeline embeds a document in 12 seconds, then waits for the next query.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;In every one of these cases, hourly billing forces you to pay for the slowest unit of time the cloud will charge you: a full hour. If your job runs for 90 seconds, you pay for 3,600 seconds. That&amp;#39;s a 40x markup on the actual compute you used.&lt;/p&gt;&lt;p&gt;Per-second billing fixes this by charging you for the seconds you actually used. The savings aren&amp;#39;t theoretical — they show up the moment you switch.&lt;/p&gt;&lt;p&gt;Let&amp;#39;s prove it with four workloads Indian startups actually run.&lt;/p&gt;&lt;h3 id=&quot;workload-1-bursty-inference-api-the-most-common-pattern&quot;&gt;Workload 1: Bursty Inference API (the most common pattern)&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;: You&amp;#39;re a SaaS startup running a Llama 3 8B inference endpoint for B2B customers. Traffic is moderate - about 200 requests per hour during Indian business hours, near-zero overnight. Average inference time: 4 seconds per request.&lt;/p&gt;&lt;p&gt;
&lt;strong&gt;Compute footprint per day:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;200 requests/hour × 10 active business hours = 2,000 requests&lt;/li&gt;&lt;li&gt;2,000 requests × 4 seconds = 8,000 seconds of actual GPU work&lt;/li&gt;&lt;li&gt;That&amp;#39;s 2 hours and 13 minutes of real compute per day&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Hourly billing reality on an A100 80GB at ₹189/hour:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You can&amp;#39;t actually only pay for 2.2 hours, because traffic is spread across 10 hours.&lt;/li&gt;&lt;li&gt;To serve traffic across the day, you keep the GPU running for at least 10 hours.&lt;/li&gt;&lt;li&gt;Cost: 10 × ₹189 = ₹1,890/day = ~₹56,700/month&lt;/li&gt;&lt;li&gt;Actual GPU utilization: ~22%&lt;/li&gt;&lt;li&gt;You&amp;#39;re paying for 78% idle time.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Per-second billing on the same A100 80GB at the same effective rate (₹189/hour ÷ 3,600 = ₹0.0525/second):&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;8,000 seconds × ₹0.0525 = ₹420/day = ~₹12,600/month&lt;/li&gt;&lt;li&gt;Cost reduction: ~78%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Even if you assume per-second pricing is slightly higher per second to offset the flexibility (say, 20% premium), you still land at around ₹15,120/month - roughly 73% lower than hourly.&lt;/p&gt;&lt;p&gt;This is the single biggest win, and it&amp;#39;s why bursty inference is the canonical per-second billing use case.&lt;/p&gt;&lt;h3 id=&quot;workload-2-rag-pipeline-with-embedding-generation&quot;&gt;Workload 2: RAG Pipeline with Embedding + Generation&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;: You&amp;#39;re building a document-Q&amp;amp;A product. A user uploads a PDF, you embed it, store the vectors, and answer questions. Embedding takes 8–15 seconds. Generation takes 3–6 seconds per question. Average user: 1 upload + 4 questions per session. About 60 sessions per day.
Compute footprint per day:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Embedding: 60 × 12 sec = 720 seconds&lt;/li&gt;&lt;li&gt;Generation: 60 × 4 questions × 4 sec = 960 seconds&lt;/li&gt;&lt;li&gt;Total: 1,680 seconds = 28 minutes of actual GPU work&lt;/li&gt;&lt;li&gt;But sessions are spread across ~12 hours of the day

Hourly billing on an L40S at ~₹120/hour:&lt;/li&gt;&lt;li&gt;GPU runs for 12 hours to cover the spread = ₹1,440/day = ₹43,200/month&lt;/li&gt;&lt;li&gt;Actual utilization: 28 min / 720 min = ~3.9%&lt;/li&gt;&lt;li&gt;You&amp;#39;re paying for 96% idle time&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Per-second billing at the same effective rate (₹0.033/second):&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;1,680 seconds × ₹0.033 = ₹55/day = ₹1,650/month&lt;/li&gt;&lt;li&gt;Cost reduction: ~96%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This sounds insane, but the math is right - and this is exactly why RAG-heavy startups burn through pre-seed funding faster than they expect on hourly clouds. RAG is extremely spiky, and most founders don&amp;#39;t see the bill problem until month three.&lt;/p&gt;&lt;p&gt;In practice, savings will land closer to 85–90% once you factor in cold starts, model loading, and minor per-second pricing premiums. Still life-changing.&lt;/p&gt;&lt;h3 id=&quot;workload-3-scheduled-batch-jobs-overnight-processing&quot;&gt;Workload 3: Scheduled Batch Jobs (overnight processing)&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Scenario: &lt;/strong&gt;You run a content moderation service. Every night at 2 AM, you batch-process the day&amp;#39;s flagged content through a vision model. The job takes 18 minutes on an A100.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Hourly billing:&lt;/strong&gt;
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;A100 at ₹189/hour, billed for full hour minimum = ₹189/day = ₹5,670/month&lt;/li&gt;&lt;li&gt;Actual utilization for that &amp;quot;hour&amp;quot;: 18/60 = 30%
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Per-second billing:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;18 minutes × 60 = 1,080 seconds × ₹0.0525 = ₹56.7/day = ₹1,701/month&lt;/li&gt;&lt;li&gt;Cost reduction: ~70%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Batch jobs are the quiet, unsexy win. They look small per day, but they compound across a year. ₹5,670 vs ₹1,701 per month is ₹47,628 in annual savings - for one job. Most ML teams have 5–10 of these.&lt;/p&gt;&lt;h3 id=&quot;workload-4-serverless-api-with-cold-starts&quot;&gt;Workload 4: Serverless API with Cold Starts&lt;/h3&gt;&lt;p&gt;&lt;strong&gt;Scenario&lt;/strong&gt;: You expose a Stable Diffusion XL endpoint that runs about 80 requests/day, unpredictably distributed. Each request takes ~7 seconds of actual GPU time, but the model takes ~12 seconds to cold-start when the GPU goes idle.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Hourly billing reality:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;To avoid cold starts on every request, you keep the GPU warm for 16 hours/day&lt;/li&gt;&lt;li&gt;16 × ₹120 (L40S) = ₹1,920/day = ₹57,600/month&lt;/li&gt;&lt;li&gt;Actual GPU work: 80 × 7 sec = 560 sec/day = ~9 minutes&lt;/li&gt;&lt;li&gt;Utilization: 0.9%. Yes, less than one percent.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Per-second billing with smart warm-pool management:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Pay only for the 9 minutes of actual work + occasional cold-start overhead&lt;/li&gt;&lt;li&gt;Realistic monthly cost: ₹3,500–5,500/month depending on how aggressive your scale-to-zero is&lt;/li&gt;&lt;li&gt;Cost reduction: ~90–94%&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;This is the workload pattern where per-second billing isn&amp;#39;t just cheaper - it&amp;#39;s the only economically viable option. Running serverless-style APIs on hourly billing is roughly equivalent to keeping a taxi parked outside your house all day in case you need a 5-minute ride&lt;/p&gt;&lt;h2 id=&quot;the-honest-caveats&quot;&gt;The Honest Caveats &lt;/h2&gt;&lt;p&gt;&lt;strong&gt;A few things this post is NOT claiming:&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;1. &lt;strong&gt;Per-second billing always wins.&lt;/strong&gt; It doesn&amp;#39;t. For long-running training jobs (6+ hours of continuous GPU usage), per-second offers no real advantage - you&amp;#39;re going to use the full hour anyway, so per-hour or committed-use pricing is often cheaper.&lt;/p&gt;&lt;p&gt;2. &lt;strong&gt;The savings are pure profit.&lt;/strong&gt; They&amp;#39;re not. If your workload is genuinely bursty, per-second billing reveals that you&amp;#39;ve been over-provisioning, and the savings are real. But you&amp;#39;ll also need to invest in scale-to-zero logic, warm-pool management, and cold-start optimization to capture them fully.&lt;/p&gt;&lt;p&gt;3.&lt;strong&gt; Cold starts are free.&lt;/strong&gt; They&amp;#39;re not. A model that takes 30 seconds to load costs you 30 seconds of billing every time it cold-starts. If your traffic is just spiky enough to trigger constant cold starts but just dense enough to need warmth, you can actually end up worse off. The fix is provider-level cold-start optimization (FlashBoot, model caching, etc.) - which good per-second clouds offer.&lt;/p&gt;&lt;p&gt;4. &lt;strong&gt;Per-second pricing sometimes carries a small premium per second&lt;/strong&gt;. A few providers charge 10–20% more per second of compute than the equivalent per-hour rate, on the theory that flexibility has a price. Even with this premium, the workloads above still come out massively ahead - but you should run the math on your specific traffic pattern.&lt;/p&gt;&lt;h3 id=&quot;when-per-second-billing-wins-and-when-it-doesnt&quot;&gt;When Per-Second Billing Wins (And When It Doesn&amp;#39;t)&lt;/h3&gt;&lt;p&gt;A simple decision rule:&lt;/p&gt;&lt;p&gt;Use per-second billing if:&lt;/p&gt;&lt;ul&gt;&lt;li&gt;Your GPU utilization is below 60%&lt;/li&gt;&lt;li&gt;Your workload is bursty, request-driven, or scheduled&lt;/li&gt;&lt;li&gt;You&amp;#39;re running RAG, real-time inference APIs, or batch jobs under an hour&lt;/li&gt;&lt;li&gt;You&amp;#39;re early-stage and your traffic is unpredictable&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;&lt;strong&gt;Stick with per-hour or committed pricing if:&lt;/strong&gt;&lt;/p&gt;&lt;ul&gt;&lt;li&gt;You&amp;#39;re training a model for 8+ continuous hours&lt;/li&gt;&lt;li&gt;Your inference traffic is dense enough to keep utilization above ~70%&lt;/li&gt;&lt;li&gt;You can commit to 1-3 months of usage and want maximum discount&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;For 80%+ of Indian AI startups we saw - RAG-based, inference-heavy, traffic-spiky, pre-PMF - per-second is the rational choice. For the other 20%, hourly committed pricing wins.&lt;/p&gt;&lt;h2 id=&quot;how-podstack-approaches-this&quot;&gt;How PodStack Approaches This&lt;/h2&gt;&lt;p&gt;PodStack bills per-second by default. There&amp;#39;s no &amp;quot;you must run for at least 1 hour&amp;quot; minimum, no rounding up, no surprises on the invoice. You pay for the seconds the GPU actually ran your code.&lt;/p&gt;&lt;p&gt;We pair this with two things that make per-second billing actually work in practice:&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Fractional GPU allocation&lt;/strong&gt;. If your inference job only needs 25% of an A100, you can rent 25%. Combined with per-second billing, this means small workloads pay genuinely small bills - not &amp;quot;small fraction of a big bill.&amp;quot;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;INR-denominated&lt;/strong&gt;, no-egress pricing. Per-second savings get destroyed if your provider charges 9¢/GB egress. PodStack bills entirely in INR with zero egress, so the savings you see in our math actually land in your bank account.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The result&lt;/strong&gt;: most Indian startups moving from AWS/Azure hourly inference to PodStack per-second see 40–60% reductions on inference workloads, with RAG and serverless workloads sometimes hitting 70–90%. These aren&amp;#39;t marketing numbers - they&amp;#39;re what falls out of the math when bursty workloads stop paying for idle time.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Run Your Own Numbers&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;Before you switch anything, do this exercise tonight:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;Pull last month&amp;#39;s GPU bill.&lt;/li&gt;&lt;li&gt;Open your monitoring dashboard.&lt;/li&gt;&lt;li&gt;Calculate: (Total GPU hours billed) vs (Total GPU hours actually computing).&lt;/li&gt;&lt;li&gt;The ratio is your utilization.&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;If it&amp;#39;s below 60%, you&amp;#39;re a per-second billing candidate, full stop. If it&amp;#39;s below 30%, you&amp;#39;re losing money every single day you stay on hourly.&lt;/p&gt;&lt;p&gt;The Indian AI infrastructure market is finally giving you the tools to fix this. Use them.&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://res.cloudinary.com/daqmmqq3l/image/upload/v1777906670/podstack-blog/podstack_og_image_per_second_billing_b8c2ce68c1.png&quot; alt=&quot;Why Per-Second GPU Billing Saves Indian Startups 40–60% on Inference (With Real Math)&quot;/&gt;&lt;/p&gt;</content:encoded><category>Cloud Economics</category><category>Per-Second Billing</category><category>GPU Cost Optimization</category><category>Indian AI Startups</category><category>Startup Infrastructure </category><category>Inference Cost</category><category>RAG Pipeline</category><category>Cloud Economics</category><category>PodStack</category><category>NVIDIA A100</category><category>Serverless GPU</category><author>Saurav Kumar</author></item></channel></rss>