Research · confidential computing · RTX PRO 6000 · 8×B300

Confidential inference for the Enterprise: attested, measured, and where it stands

October 2026 was a month of breaches at cloud and AI platforms. Everyone encrypts data in transit (TLS/HTTPS) and at rest (KMS); data in use (RAM, vRAM), the weights and prompts inside a running model, stays readable by whoever runs your neocloud provider’s compute node. One zero-day CVE in the hypervisor and an attacker who lands on the host can read every VM on it, and clone them whole. For a bank under DORA and PCI DSS, or a healthcare or pharma company under HIPAA and GDPR, serving a private model on it is the whole risk.

Confidential computing closes that gap. We ran open-weight models on an RTX PRO 6000 and on eight B300s in that mode, verified the proof from inside, measured the price on the bus and per token, and hit a set of problems in the serving stack: a silent correctness bug in vLLM, performance limits no engine can route around, and features that do not exist in CC mode yet.

The breaches behind that first sentence: Railway asked every customer to rotate every secret, LiteLLM’s release pipeline was hijacked to steal inference tokens, and OpenCode, Zeabur and PingCAP reported stolen credentials. All of them stopped at credentials; an attacker who reaches a compute node does not need any. We had four questions for the hardware, and here are the short answers:

Can we prove it?
Yes
CPU and GPU sign reports with our own nonce; we checked both against AMD and NVIDIA, not the provider.
Does it slow the GPU?
No
VRAM is isolated, not encrypted, so compute runs at full speed. Batched serving loses a few percent.
What does it cost?
The bus
Host ↔ GPU copies run at 17–21 GB/s, a third of the link, and every start is cold: no GPU snapshots.
Works out of the box?
Not yet
Stock vLLM serves silent garbage. SGLang works; vLLM needs one environment variable.
1× RTX PRO 6000 and 8× B300 · AMD SEV-SNP · NVIDIA confidential computing, encrypted NVLink on B300

01 · WHYSecure sensitive data in transit, at rest and in use

Data lives in three places, and each needs its own protection:

one inference request · three states of datain transit · encrypted
computeryour appprompt, answer
compute node · GPUin use
RAM—
PCIe—
VRAM—
diskmodel filesvolumes, logs
TLS and KMS cover two of the threein use: readable by the host

The middle belongs to the host. A hypervisor can read any page of any guest it runs, and a VM is a file: pause it, dump it, clone it, and the clone answers questions with your model. GPU memory is reachable from the host through the card’s PCIe windows; the traffic between CPU and GPU crosses the bus unencrypted. None of this needs a malicious provider, only one compromised operator account, and the tenant never learns it happened. On a shared host every tenant is in the same position.

one host · three tenants · root on the hypervisorplain VMs
bank data
health data
your model
hypervisorroot
attacker’s copyempty
same host, same root, same dump0 of 3 VMs copied

Confidential computing is the hardware answer: the CPU encrypts the VM’s memory with a key the hypervisor never holds, the GPU fences its memory and encrypts its bus, and both sign a report of what they are running, so the tenant can check before sending a single prompt. An attacker with full root on the host sees ciphertext in RAM, ciphertext on the bus, a GPU that refuses the host’s reads, and a proof they cannot forge. That is the promise; the rest of this post is what it costs and where it currently breaks.

Four mechanisms have to hold at once, and each covers what the others cannot:

chain of trust · four linkschecking
every link must hold
CPU TEE
guest RAM encrypted
GPU CC
VRAM isolated, links encrypted
attestation
signed CPU + GPU reports
key release
model key to the enclave
each link closes what the others cannot0 of 4 links

The CPU and the GPU protect data in use differently, and the difference explains most of this post. The CPU encrypts memory itself; the GPU encrypts only what leaves the chip:

Where the data isUnder CCHow
Guest RAMencryptedper-VM key, in the CPU’s memory controller
CPU ↔ GPU over PCIeencryptedSPDM keys, AES-GCM bounce buffers
GPU ↔ GPU over NVLinkencryptedNVLE on Blackwell; not on Hopper
GPU memory (VRAM)isolated, not encryptedonly your VM reaches it; wiped on exit

Why VRAM is not encrypted. Pushing HBM’s 8 TB/s through AES would cost the GPU the bandwidth it is bought for. So the GPU guards its memory instead: it sits on the same package as the chip, the host cannot reach it while CC is on, and it is wiped between processes. NVIDIA documents this design for Hopper. That is why compute runs at full speed while every copy over PCIe pays (section 05).

We checked one of the claims directly. A process filled 48 GiB of the GPU’s memory with a marker word and exited without clearing it; a second process allocated the same 48 GiB and scanned it: 0 marker words, 100% zeros. Since VRAM is isolated rather than encrypted, this wipe is part of the guarantee, not a courtesy. On GPUs in the clear, a decade of papers has found the previous tenant’s data in freshly allocated memory; this one scrubbed it. One run, one card, no paired run without CC, but it is the right answer.

One thing confidential computing does not do, and people often expect it to: it protects the VM from the host, not a process from root inside the same VM.

who can read a process’s memory · one confidential VMprocess writes a secret
outside the VMroot on the host
—
by design · not measured
confidential VM · SEV-SNP
process./secret
—
inside the VMroot in the guest
—
measured
same memory, two readersthe boundary is the VM

The left half is the design: the CPU encrypts guest memory with a key the hypervisor never holds, so a host-side dump of those pages is ciphertext. Showing it takes hypervisor access, which a rented confidential VM does not give, so we did not measure it. The right half we did measure: as root inside the guest we read the string straight out of the process’s memory through /proc/71157/mem. Everything inside the VM, Vault included, trusts the guest kernel and whoever is root in it; what the enclave buys you is that nobody outside gets in.

03 · THE BENCHThe machine

ProviderVerda, Finland (FIN-03): one VM with an RTX PRO 6000, one with 8×B300
GuestUbuntu 26.04.1 LTS, kernel 7.0.0-38-generic, KVM, no nested virtualization
CPUAMD EPYC Turin, 30 vCPU, 87 GiB RAM, SEV-SNP at VMPL 0
GPURTX PRO 6000 Blackwell Server Edition, 96 GB, PCIe 5.0 x16
Driver595.91.07 open kernel module, CUDA 13.4
CCON, PRODUCTION, DevTools OFF, all VRAM protected
EnginesvLLM 0.32.0 and the 2026-10-26 nightly, SGLang 0.5.22, Transformers

We ran everything on Verda. Nebius support told us that none of its platforms supports confidential computing today.

$ nvidia-smi conf-compute -q
    CC State                   : ON
    Multi-GPU Mode             : None
    CPU CC Capabilities        : AMD SEV-SNP
    GPU CC Capabilities        : CC Capable
    CC GPUs Ready State        : Ready
$ nvidia-smi conf-compute -e; nvidia-smi conf-compute -d; nvidia-smi conf-compute -gm
CC Environment: PRODUCTION
DevTools Mode: OFF
Protected memory size:   99463296 KiB
Unprotected memory size: 0 KiB
$ dmesg | grep -E "SEV|confidential"
Memory Encryption Features active: AMD SEV SEV-ES SEV-SNP
SEV: SNP running at VMPL0.
software IO TLB: Memory encryption is active and system is using DMA bounce buffers
systemd[1]: Detected confidential virtualization sev-snp.

Two checks before any benchmark. Production, not DevTools: DevTools mode relaxes the protections so profilers work; ours ran production. On is not ready: CUDA fails with system not yet initialized until the guest runs nvidia-smi conf-compute -srs 1, which should come only after GPU attestation.

04 · ATTESTATIONProve it from inside

Everything above is what the vendors say the hardware does. Attestation is how you check it without taking the provider’s word: you send a fresh random nonce, the CPU and the GPU each sign a report that contains it and what they are running, and you verify both signatures against AMD’s and NVIDIA’s roots, keys the provider does not hold.

how an enclave proves itself · remote attestationyou send a fresh nonce
tenantyou
—
fresh random nonce
confidential VM
CPU · AMD SEV-SNPsigns a report
—
signed · chip key (VCEK)
GPU · CC modesigns a report
—
signed · device key
model key
you verifyagainst vendor roots
AMD chain · ARK → VCEK·
NVIDIA chain · RIMs·
nonce is yours·
debug off·
firmware golden·
no provider key involved
trust AMD and NVIDIA, not the provider0 of 5 checks

We did both from inside the VM, about 100 lines of Python (scripts in the post’s data folder):

CPU · SEV-SNPGPU · CC mode
Report1,184 bytes via configfs-tsmSPDM, via NVML
Signed byVCEK, a chip-unique keythe GPU’s device key
Checked againstAMD KDS: ARK → ASK → VCEKNVIDIA cert chain and RIM service
Resultvalid; nonce ours, debug offvalid; driver and VBIOS golden

The last link is the key. We ran it with Vault as the broker: a script checks both reports, then pulls the key and decrypts the model; with a wrong expected measurement it refuses. KServe 0.20’s confidential model serving does the same with a Key Broker Service such as Trustee, but it needs Confidential Containers, and those need nested KVM, which this guest does not have.

05 · THE BRIDGEWhat confidential computing costs

In CC mode the GPU cannot read guest memory and the CPU cannot touch GPU memory, so every copy between them is staged through a shared, encrypted bounce buffer: encrypt on one side, DMA, decrypt on the other. On a single card this is the only thing the GPU side encrypts; VRAM stays unencrypted behind the isolation. That is the cost, and the reason it lands on copies, not on compute. We measured it with synchronous cudaMemcpy from pinned memory, medians over a batch, while the link was at full Gen5 x16:

Copy sizeH2DH2DD2HD2D
4 KiB15 µs0.3 GB/s0.3 GB/s1 GB/s
64 KiB19 µs3.4 GB/s3.7 GB/s9 GB/s
1 MiB85 µs12.3 GB/s13.7 GB/s126 GB/s
16 MiB878 µs19.1 GB/s20.9 GB/s1,929 GB/s
256 MiB15,395 µs17.4 GB/s18.3 GB/s731 GB/s
1 GiB60,896 µs17.6 GB/s18.2 GB/s728 GB/s
host → GPU copies · GPU CC onpinned · median
PCIe 5.0 x16 in the clear ≈ 50
4 KiBRTX PRO 6000
0.3 GB/s
B300
0.1 GB/s
1 MiBRTX PRO 6000
12.3 GB/s
B300
10.8 GB/s
16 MiBRTX PRO 6000
19.1 GB/s
B300
19.8 GB/s
1 GiBRTX PRO 6000
17.6 GB/s
B300
17.7 GB/s
RTX PRO 6000 on PCIe 5.0 · B300 on PCIe 6.0same 17–21 GB/s ceiling

Plain PyTorch shows the same. A 4 KiB non_blocking copy returns in 15 µs on an idle stream, but after 85.5 ms behind 85 ms of matmuls, because it waits for the queue to drain. A decode loop that sends every token through the host pays 0.14 ms per token on Qwen3-0.6B (1%) and 0.52 ms on Qwen3-8B (2%).

What it means. CC does not slow the GPU, it slows the door into it, because the door is the only part that is encrypted. Inference that keeps its work on the GPU and batches requests pays a few percent. Anything that crosses PCIe often or in bulk pays in full: host-side token loops, weight loading and KV-cache offload to CPU memory run at 17–21 GB/s with no overlap.

06 · THE BUG“!!!!” instead of “Paris”

Then we started vLLM. It loaded Qwen3-8B, served 2,255 tokens per second at 32 requests, and every answer was garbage, with not one warning in the log.

$ curl -s localhost:8000/v1/completions -d '{"model":"Qwen/Qwen3-8B","prompt":"The capital of France is","max_tokens":16,"temperature":0}'
" ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! !"
$ docker logs vllm | grep -ciE "error|warn.*cc|confidential"
0

Every vLLM configuration we tried was wrong, each in its own way. Transformers and SGLang, with the same weights on the same GPU, were right:

Stack“The capital of France is”
Transformers, eager, same weightsParis. The capital of France is a…
vLLM nightly, TRITON_ATTN今天早上起来发现没有找到对应的业务需求不2. 3 3 3 3
vLLM nightly, FLASHINFER\n\n2222222222222222222222
vLLM 0.32.0 stable, CUDA graphs!!!!!!!!!!!!!!!!!!!!!!!*
vLLM 0.32.0, VLLM_USE_V2_MODEL_RUNNER=0Paris. The capital of France is a…
SGLang 0.5.22, defaultsParis. The capital of France is a…

Weights, kernels and plain copies all checked out byte for byte. The first layer gave it away: the GPU was not reading the prompt we sent.

prompt we sent       [785, 6722, 315, 9625, 374]      # "The capital of France is"
what the GPU read    [53461, 94817, 112247, 62908, 0]

The cause. vLLM’s default V2 model runner does not copy the prompt to the GPU. It maps a CPU buffer once and lets the GPU read it in place. In CC mode the driver does not treat that buffer as shared, so the GPU gets a one-time snapshot and keeps reading the first, stale contents forever. This is vLLM issue #57224, first seen on an H100 in a TDX guest. Until PRs #57415 or #57404 land, one variable switches back to the older runner with explicit copies:

$ docker run --gpus all -e VLLM_USE_V2_MODEL_RUNNER=0 -p 8000:8000 vllm/vllm-openai:v0.32.0 Qwen/Qwen3-8B
$ curl -s localhost:8000/v1/completions -d '{"model":"Qwen/Qwen3-8B","prompt":"The capital of France is","max_tokens":16,"temperature":0}'
" Paris. The capital of France is also the capital of the French Republic."
Not every inference engine is ready for CC out of the box. vLLM’s default path served wrong answers at full speed with a clean log; SGLang and vLLM’s older runner were fine. Attestation cannot catch this: it proves the hardware is genuine, not that the software computes the right thing. Run a canary, a prompt with a known answer, after every start and before the port opens.

07 · SERVINGSix models in CC mode

With the runner fixed, how fast does a confidential GPU serve? vLLM 0.32.0 with the V1 runner and CUDA graphs, and SGLang 0.5.22 for comparison, each with 85% of the memory and a 4K context; vllm bench serve from a sidecar container with random 1,024-token prompts, 512-token answers and --ignore-eos, from 1 to 64 requests at once. Six models that people actually run on a 96 GB card: Qwen3 at 0.6B, 8B and 14B, Phi-4-mini, DeepSeek-R1-Distill-Llama-8B and gpt-oss-20b.

RTX PRO 6000 · GPU CC on64 requests · tok/s
Qwen3-0.6BvLLM · 2.6 ms/token
6,316
Phi-4-minivLLM · 8.0 ms/token
3,504
gpt-oss-20bvLLM · 4.9 ms/token
4,155
Qwen3-8BvLLM · 12.5 ms/token
2,565
Qwen3-8BSGLang · 12.3 ms/token
2,565
R1-Distill-Llama-8BvLLM · 12.2 ms/token
2,732
Qwen3-14BvLLM · 21.5 ms/token
1,691
1K prompt, 512-token answer, V1 runnervLLM = SGLang within 1%
ModelEnginems / token1 request83264
Qwen3-0.6BvLLM2.6380†2,1904,8716,316
Qwen3-8BvLLM12.580†5691,6392,565
Qwen3-8BSGLang12.381†5671,6352,565
Qwen3-14BvLLM21.546†3361,0251,691
Phi-4-mini 3.8BvLLM8.0125†8562,3483,504
DeepSeek-R1-Distill-Llama-8BvLLM12.282†5901,7192,732
gpt-oss-20bvLLM4.9202†8852,5084,155
Qwen3-8B, --enforce-eagervLLM13.972†503——
Qwen3-8B, --no-async-schedulingvLLM12.779†575——
Qwen3-0.6BSGLang2.5405†2,291——

Output tokens per second at 1, 8, 32 and 64 concurrent requests. † Single-request decode rate, measured after the one-time first-request pause.

All runs · TTFT, TPOT, ITL p99
ModelEngineRequestsOutput tok/sTTFT median, msTPOT median, msITL p99, ms
Qwen3-0.6BvLLM1380†222.62.7
Qwen3-0.6BvLLM82,190543.63.8
Qwen3-0.6BvLLM324,871976.47.9
Qwen3-0.6BvLLM646,3166410.021.7
Qwen3-8BvLLM180†7512.512.7
Qwen3-8BvLLM856936513.413.9
Qwen3-8BvLLM321,63977618.318.4
Qwen3-8BvLLM642,56525223.727.0
Qwen3-8BSGLang181†9812.312.6
Qwen3-8BSGLang856736113.514.1
Qwen3-8BSGLang321,635105117.518.4
Qwen3-8BSGLang642,56530822.224.2
Qwen3-14BvLLM146†11521.521.8
Qwen3-14BvLLM833666222.723.3
Qwen3-14BvLLM321,025131428.828.8
Qwen3-14BvLLM641,69136235.337.4
Phi-4-mini 3.8BvLLM1125†448.08.3
Phi-4-mini 3.8BvLLM88561619.19.4
Phi-4-mini 3.8BvLLM322,34830213.213.7
Phi-4-mini 3.8BvLLM643,50423717.877.9
DeepSeek-R1-Distill-Llama-8BvLLM182†6812.212.7
DeepSeek-R1-Distill-Llama-8BvLLM859035712.913.4
DeepSeek-R1-Distill-Llama-8BvLLM321,71973517.417.6
DeepSeek-R1-Distill-Llama-8BvLLM642,73224422.124.8
gpt-oss-20bvLLM1202†504.95.1
gpt-oss-20bvLLM88852278.69.8
gpt-oss-20bvLLM322,50844612.112.7
gpt-oss-20bvLLM644,15524014.843.5
Qwen3-8B, --enforce-eagervLLM172†7413.914.1
Qwen3-8B, --enforce-eagervLLM850336815.315.6
Qwen3-8B, --no-async-schedulingvLLM179†6012.712.8
Qwen3-8B, --no-async-schedulingvLLM857534213.313.6
Qwen3-0.6BSGLang1405†502.52.6
Qwen3-0.6BSGLang82,291623.33.6

Startup is the other story: one to three minutes to ready, as in the clear, but with nothing to skip it.

ModelEngineReady, sWeights, sFirst request, s
Qwen3-0.6BvLLM1510.122.4
Qwen3-8BvLLM1551.123.1
Qwen3-8BSGLang751.20.2
Qwen3-14BvLLM19121.623.1
Phi-4-mini 3.8BvLLM1205.50.1
DeepSeek-R1-Distill-Llama-8BvLLM16011.623.8
gpt-oss-20bvLLM1204.50.1
Qwen3-0.6BSGLang700.30.2

Weights are not the bottleneck: from the page cache 15 GiB reached the GPU in about a second. Compile and graph capture take the rest, exactly as without CC. The difference is that a CC guest cannot restore a snapshot to skip them (section 09).

Bottom line. Throughput is not the main price of CC: a batched engine runs close to what the GPU allows. Published comparisons put stock vLLM at about 10% slower on this card and 26% on a B300, and NVIDIA’s patch (#52226) closes most of that gap. The bigger price is paid at start-up.

08 · B300The same chain on eight B300s

The same provider then gave us an hour on eight NVIDIA B300s with encrypted NVLink (NVIDIA calls it NVLE), the same driver and an AMD Turin SEV-SNP guest. Two questions one card could not answer: does a faster bus help, and what does encryption do to NVLink? Attestation came first, exactly as designed: CUDA refuses to start until the GPUs are verified and set ready.

$ nvidia-smi conf-compute -grs
Confidential Compute GPUs Ready state: not-ready
$ ./probe                     # can CUDA start?
cudaGetDeviceCount: system not yet initialized (n=-1)
$ python3 -m verifier.cc_admin --user_mode   # attest all 8 GPUs first
GPU Attestation is Successful.
$ nvidia-smi conf-compute -srs 1   # only now: let CUDA in
$ ./probe
cudaGetDeviceCount: no error (n=8)
RTX PRO 6000 · PCIe 58×B300 · PCIe 6
Host → GPU, 1 GiB17.6 GB/s17.7 GB/s
One 4 KiB copy15 µs33 µs
GPU memory copy728 GB/s3.2 TB/s
GPU ↔ GPU, encrypted NVLink—645–659 GB/s
8-GPU all-reduce, 256 MiB—494 GiB/s
8×B300 · GPU CC on · NVLE64 requests · tok/s
Qwen3-8BvLLM · TP8 · 3.3 ms
12,128
Qwen3-8BSGLang · TP1 · 4.1 ms
8,280
Qwen3-8BvLLM · TP1 · 4.6 ms
7,842
Qwen3-235B-A22B-FP8vLLM · TP8 · 9.6 ms
3,285
1K prompt, 512-token answerTP8 over encrypted NVLink
ModelEnginems / token1 request83264
Qwen3-8BvLLM · TP14.6216†1,4174,8377,842
Qwen3-8BSGLang · TP14.1242†1,6354,9968,280
Qwen3-8BvLLM · TP83.3304†1,7897,17012,128
Qwen3-235B-A22B-FP8vLLM · TP89.6105†5541,9223,285

Output tokens per second at 1, 8, 32 and 64 concurrent requests, 1K prompt and 512-token answer. † Single-request decode rate.

All runs · TTFT, TPOT, ITL p99
ModelEngineRequestsOutput tok/sTTFT median, msTPOT median, msITL p99, ms
Qwen3-8BvLLM, TP11216†284.64.8
Qwen3-8BvLLM, TP181,4171075.05.2
Qwen3-8BvLLM, TP1324,8371696.38.9
Qwen3-8BvLLM, TP1647,8421477.942.3
Qwen3-8BSGLang, TP11242†264.14.3
Qwen3-8BSGLang, TP181,6351284.54.8
Qwen3-8BSGLang, TP1324,9963675.55.9
Qwen3-8BSGLang, TP1648,2801936.97.9
Qwen3-235B-A22B-FP8vLLM, TP81105†1609.69.7
Qwen3-235B-A22B-FP8vLLM, TP8855450012.613.0
Qwen3-235B-A22B-FP8vLLM, TP8321,92263815.515.8
Qwen3-235B-A22B-FP8vLLM, TP8643,28527918.120.6
Qwen3-8BvLLM, TP81304†323.33.4
Qwen3-8BvLLM, TP881,789673.84.0
Qwen3-8BvLLM, TP8327,1701184.25.7
Qwen3-8BvLLM, TP86412,128885.127.9
ModelEngineReady, sWeights, s
Qwen3-8BvLLM, TP11661.7
Qwen3-8BSGLang, TP115111.9
Qwen3-235B-A22B-FP8vLLM, TP8593195.8
Qwen3-235B-A22B-FP8, weights in memoryvLLM, TP837914.0
Qwen3-8BvLLM, TP82610.4

What B300 adds. Scale does not change the picture. GPUs and NVLink run at full speed inside the enclave, the host bridge stays at about 18 GB/s whatever the bus, and the engines need the same fixes. The faster the GPU, the more the CPU-side loop costs, so CC-aware engines matter more on B300 than on a workstation card.

09 · LIMITSWhat CC mode will not do

FeatureUnder CCWhat it means
GPU snapshots (cuda-checkpoint)not supportedevery start is cold
KV-cache offload to host memorynot supportedno KV offload in vLLM
GPU reading host memory in placestale databreaks vLLM’s V2 runner
Zero-copy and managed memoryworksexplicit sharing is fine
NVLink between GPUsencryptedtensor parallelism at full speed
Nested virtualizationnoneno Confidential Containers inside
$ cuda-checkpoint --action lock --pid $(pgrep -f EngineCore)
CUDA_ERROR_NOT_SUPPORTED: operation not supported
$ cuda-checkpoint --action lock --pid $(pgrep victim)      # a plain 1 GiB CUDA process
CUDA_ERROR_NOT_SUPPORTED: operation not supported

What it means for warm starts. warmctl restores an engine in seconds from a snapshot of its CPU and GPU state. In a CC guest the GPU checkpoint API refuses every CUDA process, so a confidential replica pays the full cold start each time. Until NVIDIA supports checkpoints in CC mode, the only levers are kernel caches and fast weight loading.

10 · TAKEAWAYSWhat total confidentiality costs

Confidential computing closes the last gap, data in use, and on Blackwell the hardware delivers. This is the bill we measured.

the bill · measured on RTX PRO 6000 and 8×B300what confidentiality costs
GPU compute451 TFLOPS BF16; VRAM isolated, not encryptedfree
Batched servingvLLM and SGLang within 1%; bridge 1–2% of a decode stepa few %
Host ↔ GPU copies17–21 GB/s on PCIe 5 and 6, synchronous, no overlap⅓ of the link
Cold startsno GPU snapshots, no KV offload to host memoryevery start
Engine readinessvLLM default serves silent garbage; one flag and a canarycheck yours
you getRAM encrypted · PCIe and NVLink encrypted · VRAM isolated and wiped · proof signed by AMD and NVIDIA · keys only for a verified VM
compute stays free, the doorway does not5 of 5 items

Worth it, with eyes open. Know what you are buying: the CPU encrypts RAM, while the GPU encrypts only its links and guards VRAM by isolation and wiping, which is exactly why it keeps full speed. For a bank or a healthcare company that must keep prompts and weights away from the provider, the price is low where it matters most: the GPU runs at full speed and a batched engine loses a few percent. The real costs are operational: slow, always-cold starts and engines that are not yet CC-aware by default.

Before you ship

Every script and raw output from these runs is in the post’s data folder.

Sources