DeepSeek 自研推理芯片:大模型成本战打到硬件层

2026-07-08 23 预计阅读时间: 1 分钟
来源: oschina.net AI 摘要 Original link

Disclaimer: This article is an AI-assisted summary. Read it together with the original source when precision matters. The summary may omit context, version differences, or edge cases and is not official documentation.

预计阅读时间:9 分钟

据报道,DeepSeek 正在开发自有 AI 芯片,而且目标不是训练,而是推理。这个区别很关键:训练芯片解决“把模型做出来”的问题,推理芯片解决“每天把模型便宜、稳定、低延迟地跑起来”的问题。对一家面向真实用户提供模型服务的公司来说,后者往往才是长期成本的大头。

为什么是推理芯片,而不是训练芯片

训练和推理对硬件的要求不完全一样。

训练阶段需要巨大的并行计算、显存容量、互联带宽和集群稳定性。模型训练完成后,推理阶段的核心压力变成:单次请求延迟、吞吐量、显存占用、批处理效率、能耗,以及服务峰值下的稳定性。

DeepSeek 如果自研的是推理芯片,意味着它更可能瞄准以下场景:

  • 已训练模型的大规模在线服务;
  • 对话、代码生成、搜索增强生成等高频请求;
  • 在固定模型架构和固定运行时上做深度优化;
  • 降低对通用 GPU 的长期依赖。

这不是一个“替代所有 GPU”的叙事。更现实的路径是:训练仍依赖成熟 GPU 或现有加速卡,推理逐步迁移到更可控、更便宜的硬件平台。

H800、昇腾与自研芯片之间的现实张力

摘要提到,DeepSeek 当前基础设施建立在 Nvidia H800 和华为昇腾芯片之上。这个组合本身就说明了一个趋势:大模型公司正在避免把算力命脉完全压在单一供应链上。

美国出口管制限制了中国公司获得 Nvidia 最新高端 GPU。H800 是在限制环境下仍可用的一类选择,但它不是长期无限扩容的确定答案。华为昇腾则提供了本土替代路径,但生态、工具链、算子覆盖、模型适配和工程迁移成本都需要实际验证。

自研推理芯片的吸引力在于控制权:

  • 可以围绕自家模型的推理模式设计硬件;
  • 可以把编译器、运行时、量化策略和服务调度一起优化;
  • 可以减少外部供应约束对线上服务成本的影响;
  • 可以在规模足够大时摊薄芯片研发和部署成本。

但边界也很清楚。芯片不是写一个 CUDA kernel 就能交付的项目。流片、良率、驱动、编译器、算子库、故障诊断、集群调度、运维体系,每一层都会吃掉大量时间。

真正的战场是每 token 成本

大模型服务的商业压力最终会落到几个指标上:每秒生成 token 数、首 token 延迟、单位功耗 token 吞吐、每百万 token 成本、峰值请求下的错误率。

推理芯片如果要有意义,不能只在宣传页上写“算力很高”。它必须在真实 workload 下跑赢现有方案,尤其是长上下文、多并发、流式输出、KV cache 管理、量化模型这些实际场景。

工程团队评估这类变化时,不应该只问“是不是国产芯片”或“是不是替代 Nvidia”。更应该问:

  • 我的模型能不能无损或低损迁移?
  • 常用算子是否完整支持?
  • 推理框架是否支持连续批处理和 KV cache 复用?
  • p95 / p99 延迟是否稳定?
  • 故障时是否能自动回退到 GPU 池?
  • 成本下降是否足以覆盖迁移和维护成本?

可以这样实践:给推理后端做一套基准测试

下面这个示例不假设 DeepSeek 自研芯片已经可用,而是给团队一个可改造的推理基准脚本。你可以用它比较不同后端:Nvidia GPU、昇腾实例、CPU fallback,或者未来的专用推理芯片服务。

运行前需要准备一个兼容 OpenAI Chat Completions 风格的接口,并修改 BASE_URLAPI_KEYMODEL

import os
import time
import statistics
import requests
from concurrent.futures import ThreadPoolExecutor, as_completed

BASE_URL = os.getenv("BASE_URL", "http://localhost:8000/v1/chat/completions")
API_KEY = os.getenv("API_KEY", "change-me")
MODEL = os.getenv("MODEL", "your-model-name")
CONCURRENCY = int(os.getenv("CONCURRENCY", "8"))
REQUESTS = int(os.getenv("REQUESTS", "32"))

PROMPT = "用三句话解释为什么大模型推理成本会影响产品毛利。"


def call_once(i: int):
    started = time.perf_counter()
    response = requests.post(
        BASE_URL,
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        json={
            "model": MODEL,
            "messages": [{"role": "user", "content": PROMPT}],
            "temperature": 0.2,
            "max_tokens": 256,
            "stream": False,
        },
        timeout=120,
    )
    elapsed = time.perf_counter() - started
    response.raise_for_status()
    data = response.json()
    text = data["choices"][0]["message"]["content"]
    usage = data.get("usage", {})
    output_tokens = usage.get("completion_tokens", len(text))
    return {
        "id": i,
        "latency_s": elapsed,
        "output_tokens": output_tokens,
        "tokens_per_s": output_tokens / elapsed if elapsed > 0 else 0,
    }


def percentile(values, p):
    values = sorted(values)
    index = int(round((len(values) - 1) * p))
    return values[index]


def main():
    results = []
    with ThreadPoolExecutor(max_workers=CONCURRENCY) as pool:
        futures = [pool.submit(call_once, i) for i in range(REQUESTS)]
        for future in as_completed(futures):
            item = future.result()
            results.append(item)
            print(
                f"request={item['id']} latency={item['latency_s']:.2f}s "
                f"tokens_per_s={item['tokens_per_s']:.2f}"
            )

    latencies = [r["latency_s"] for r in results]
    speeds = [r["tokens_per_s"] for r in results]
    print("\n=== summary ===")
    print(f"requests: {len(results)}")
    print(f"concurrency: {CONCURRENCY}")
    print(f"latency avg: {statistics.mean(latencies):.2f}s")
    print(f"latency p95: {percentile(latencies, 0.95):.2f}s")
    print(f"tokens/s avg: {statistics.mean(speeds):.2f}")


if __name__ == "__main__":
    main()

可以这样运行:

pip install requests

export BASE_URL="http://localhost:8000/v1/chat/completions"
export API_KEY="test-key"
export MODEL="your-model-name"
export CONCURRENCY=16
export REQUESTS=100

python benchmark_inference.py

如果你在比较多个推理后端,建议固定同一个模型、同一批 prompt、同样的 max_tokens 和并发数。否则测出来的数字很容易只是“请求不一样”,不是“芯片或后端不一样”。

落地建议:把芯片选择放进服务架构,而不是 PPT

对应用团队来说,自研推理芯片的新闻不必立刻转化成采购动作,但应该转化成架构准备。

一套更稳妥的策略是:

  • 把模型服务封装在统一 API 后面,避免业务代码绑定某个硬件后端;
  • 保留多后端路由能力,例如 GPU、昇腾、CPU fallback 或未来专用推理芯片;
  • 建立标准 benchmark,包括延迟、吞吐、错误率、成本和输出质量;
  • 对关键业务保留回退路径,不把线上 SLA 直接押给新硬件;
  • 关注工具链成熟度,而不只看理论算力。

DeepSeek 自研推理芯片如果推进顺利,代表大模型竞争从模型参数、训练方法,继续下沉到推理基础设施。真正能改变行业成本结构的,不只是“有没有芯片”,而是芯片、编译器、运行时、模型和服务调度能不能拧成一个可运维的系统。


相关推荐