<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Ruitong</title>
    <description>The latest articles on DEV Community by Ruitong (@ruitong_io).</description>
    <link>https://dev.to/ruitong_io</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4079538%2F3146fb71-ff3a-4643-bb5e-7060ae340c56.jpg</url>
      <title>DEV Community: Ruitong</title>
      <link>https://dev.to/ruitong_io</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/ruitong_io"/>
    <language>en</language>
    <item>
      <title>The Same LLM, the Same Weights, the Same Prompt — Different Hardware Gives Different Answers</title>
      <dc:creator>Ruitong</dc:creator>
      <pubDate>Sat, 15 Aug 2026 23:37:27 +0000</pubDate>
      <link>https://dev.to/ruitong_io/the-same-llm-the-same-weights-the-same-prompt-different-hardware-gives-different-answers-35jb</link>
      <guid>https://dev.to/ruitong_io/the-same-llm-the-same-weights-the-same-prompt-different-hardware-gives-different-answers-35jb</guid>
      <description>&lt;p&gt;Description: "Introducing Ruitong: the first public accuracy delta table for LLMs across CUDA, Ascend, and AMD. Same model, same weights, same prompt — different hardware gives different answers. Nobody publishes this number. We do."&lt;br&gt;
tags: [llm, inference, hardware, benchmarks, gpu]&lt;br&gt;
canonical_url: &lt;a href="https://ruitong.io" rel="noopener noreferrer"&gt;https://ruitong.io&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  cover_image: &lt;a href="https://ruitong.io/matrix-banner.jpg" rel="noopener noreferrer"&gt;https://ruitong.io/matrix-banner.jpg&lt;/a&gt;
&lt;/h2&gt;

&lt;p&gt;Everyone knows that moving an LLM across hardware changes the cost and the latency. What nobody talks about is that it also changes the &lt;strong&gt;answers&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The same model, the same weights, the same prompt, the same seed — different accelerators produce different output. This isn't a bug. Floating-point arithmetic is not associative, so different kernels reduce in a different order and the logprobs shift. It's expected, unavoidable, and almost never measured.&lt;/p&gt;

&lt;p&gt;Until now.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Problem
&lt;/h2&gt;

&lt;p&gt;If you move inference from NVIDIA CUDA to Huawei Ascend, AMD MI300X, or even change precision (fp16 → bf16) on the same GPU, the output distribution shifts. The industry has good benchmarks for throughput and latency. &lt;strong&gt;Nobody publishes a reference number for accuracy equivalence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Huawei's &lt;code&gt;msprobe&lt;/code&gt; tells you operator-level tensor diffs. &lt;code&gt;vllm-ascend&lt;/code&gt;'s CI accepts 5% drift against a hardcoded YAML value with no GPU baseline. CAICT's national adaptation programme scores five dimensions — accuracy equivalence is not one of them. MLCommons publishes 99%/99.9%-of-FP32 for a handful of benchmark models.&lt;/p&gt;

&lt;p&gt;Every team migrating inference independently discovers the same drift. And independently decides what tolerance is acceptable. That's a lot of duplicated effort.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Ruitong Is
&lt;/h2&gt;

&lt;p&gt;Ruitong is a &lt;strong&gt;cross-accelerator equivalence reference&lt;/strong&gt; — a dated, versioned, reproducible accuracy delta table that answers one question: &lt;em&gt;how much does the output actually change?&lt;/em&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Reference&lt;/th&gt;
&lt;th&gt;Candidate&lt;/th&gt;
&lt;th&gt;Metric&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-8B&lt;/td&gt;
&lt;td&gt;A100 fp16&lt;/td&gt;
&lt;td&gt;A100 bf16&lt;/td&gt;
&lt;td&gt;top-k max Δlogprob&lt;/td&gt;
&lt;td&gt;✅ Collected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Qwen3-8B&lt;/td&gt;
&lt;td&gt;A100 bf16&lt;/td&gt;
&lt;td&gt;Ascend 910B bf16&lt;/td&gt;
&lt;td&gt;top-1 agreement&lt;/td&gt;
&lt;td&gt;🔄 In progress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Llama-3.1-8B&lt;/td&gt;
&lt;td&gt;A100 bf16&lt;/td&gt;
&lt;td&gt;MI300X bf16&lt;/td&gt;
&lt;td&gt;prob mass shift&lt;/td&gt;
&lt;td&gt;🔄 Planned&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h3&gt;
  
  
  The three rows that matter most
&lt;/h3&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Same hardware, different precision&lt;/strong&gt; (fp16 vs bf16) — establishes the &lt;em&gt;noise floor&lt;/em&gt;. Everything else is read against it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Different vendor, same precision&lt;/strong&gt; (NVIDIA vs Ascend/AMD) — the actual question a migrating customer has.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Same hardware, different batch size&lt;/strong&gt; — published research shows bf16 accuracy varying up to 9% from GPU count and batch size alone.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  Key Finding So Far
&lt;/h2&gt;

&lt;p&gt;On A100, across fp16 vs bf16 — same hardware, same vendor, different precision — &lt;strong&gt;18 out of 61 prompts produced different output text.&lt;/strong&gt; All calibrated equivalence gates still passed.&lt;/p&gt;

&lt;p&gt;This is the noise floor. The baseline against which every cross-vendor delta must be evaluated.&lt;/p&gt;

&lt;h2&gt;
  
  
  Beyond Token-Level Metrics
&lt;/h2&gt;

&lt;p&gt;We run &lt;strong&gt;calibrated equivalence gates&lt;/strong&gt; — end-to-end tests that check whether the candidate output is &lt;em&gt;functionally equivalent&lt;/em&gt; to the reference (same classification, same choice, same numeric output within tolerance). Our finding: even when per-token metrics show drift, calibrated gates often pass. This has implications for how inference benchmarks should be designed.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Methodology
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Models&lt;/strong&gt;: Qwen3-8B (primary), Llama-3.1-8B, DeepSeek variants&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hardware&lt;/strong&gt;: NVIDIA A100 80GB (reference), Ascend 910B 64GB, Ascend 910C 128GB, AMD MI300X&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Precisions&lt;/strong&gt;: fp16, bf16, W8A8&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Metrics&lt;/strong&gt;: top-k max Δlogprob, prob mass shift, top-1 agreement, top-5 set agreement, calibrated equivalence gates&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tooling&lt;/strong&gt;: Open-source Python pipeline, reproducible via command line&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Every company migrating inference from CUDA to Ascend (or any accelerator) needs to answer one question: &lt;em&gt;"Does the model still work correctly?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Without a published reference, every team independently discovers the same drift — and independently decides what tolerance is acceptable. Ruitong publishes the reference so the industry has a single number to cite, argue with, and improve against.&lt;/p&gt;

&lt;h2&gt;
  
  
  Current Status
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Component&lt;/th&gt;
&lt;th&gt;Status&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Benchmark spec&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Calibration harness&lt;/td&gt;
&lt;td&gt;✅ Complete&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A100 fp16/bf16 baseline&lt;/td&gt;
&lt;td&gt;✅ Collected&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ascend data collection&lt;/td&gt;
&lt;td&gt;🔄 In progress&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Public accuracy table&lt;/td&gt;
&lt;td&gt;📝 Draft&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Site&lt;/td&gt;
&lt;td&gt;✅ Live at &lt;a href="https://ruitong.io" rel="noopener noreferrer"&gt;ruitong.io&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GitHub&lt;/td&gt;
&lt;td&gt;✅ &lt;a href="https://github.com/loopeywho/ruitong" rel="noopener noreferrer"&gt;github.com/loopeywho/ruitong&lt;/a&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Contribute
&lt;/h2&gt;

&lt;p&gt;The method and tooling are open. If you run inference on different hardware and want your bench to have a comparable number, this is the reference. Pull requests, issue reports, and hardware contributions welcome.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;瑞通 Ruitong — auspicious flow between ecosystems.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://ruitong.io" rel="noopener noreferrer"&gt;ruitong.io&lt;/a&gt; · &lt;a href="https://github.com/loopeywho/ruitong" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>llm</category>
      <category>inference</category>
      <category>hardware</category>
      <category>gpu</category>
    </item>
  </channel>
</rss>
