DeepSeek's $7.4B Funding Deep Dive: The Dual-Engine Era of China's AI Capital and Technology

Abstract: In June 2026, DeepSeek completed the largest single funding round in China’s AI history — $7.4 billion (approximately ¥51 billion), with a post-money valuation of $52-59 billion. Founder Liang Wenfeng personally invested $2.8 billion, with Tencent, CATL, JD.com, NetEase, and other industrial capital joining. This article provides a technical deep dive into DeepSeek’s four core technology pillars — MoE architecture optimization, FP8 mixed-precision training, full-stack self-developed infrastructure, and the Harness agent framework — revealing how this $7.4 billion will reshape the global AI compute landscape.


I. Introduction: The Technical Narrative Behind the Funding

On June 20, 2026, DeepSeek officially announced its first-ever external funding round — $7.4 billion, with a post-money valuation of $52-59 billion. This is not only China’s largest single AI funding round but also a profound convergence of “technical idealism” and “industrial capital.”

When we talk about this $7.4 billion, what’s truly worth attention is not the number itself, but: How will this money translate into technological moats?

This article provides a pure technical perspective, dissecting DeepSeek’s four core technologies and revealing why this “never-fundraising” AI company has the pricing power in front of capital.


II. MoE Architecture: Evolution from V4 to V4-Flash

DeepSeek’s technical core is its continuously iterating MoE (Mixture of Experts) architecture. From V4 to V4-Flash to the rumored V4.1, each iteration redefines “intelligence output per unit of compute.”

2.1 MoE Core Principles

Unlike traditional Dense models where all parameters are activated for every layer, MoE architecture splits the model into multiple “expert” subnetworks, activating only a fraction of experts per token. The core formula can be described as:

Given input x, MoE layer output:
y = Σ(g_i(x) · E_i(x))

where g(x) = Softmax(TopK(W_g · x, k))
E_i(x) is the i-th expert network
k is the number of activated experts

DeepSeek-V4’s key innovations include fine-grained MoE with shared expert isolation:

# DeepSeek-V4 Fine-Grained MoE Core Implementation (Simplified)
import torch
import torch.nn as nn
import torch.nn.functional as F

class FineGrainedMoE(nn.Module):
    """
    DeepSeek-V4 style fine-grained MoE layer
    Features: shared experts + fine-grained routing + load balancing
    """
    def __init__(self, d_model, n_experts, n_shared, top_k, expert_dim=None):
        super().__init__()
        self.d_model = d_model
        self.n_experts = n_experts
        self.n_shared = n_shared
        self.top_k = top_k
        expert_dim = expert_dim or d_model * 4
        
        # Shared experts (all tokens pass through)
        self.shared_experts = nn.ModuleList([
            nn.Sequential(
                nn.Linear(d_model, expert_dim),
                nn.GELU(),
                nn.Linear(expert_dim, d_model)
            ) for _ in range(n_shared)
        ])
        
        # Routed experts (dynamically selected via gating network)
        self.experts = nn.ModuleList([
            nn.Sequential(
                nn.Linear(d_model, expert_dim),
                nn.GELU(),
                nn.Linear(expert_dim, d_model)
            ) for _ in range(n_experts)
        ])
        
        # Gating network (with load balancing bias)
        self.gate = nn.Linear(d_model, n_experts)
        self.aux_bias = nn.Parameter(torch.zeros(n_experts))
        
    def forward(self, x):
        batch_size, seq_len, _ = x.shape
        
        # 1. Shared expert forward
        shared_out = sum(expert(x) for expert in self.shared_experts) / self.n_shared
        
        # 2. Gating routing
        gate_logits = self.gate(x) + self.aux_bias
        top_k_weights, top_k_indices = torch.topk(
            F.softmax(gate_logits, dim=-1), 
            self.top_k, dim=-1
        )
        
        # 3. Expert forward + combination
        expert_out = torch.zeros_like(x)
        for i in range(self.top_k):
            expert_idx = top_k_indices[..., i]
            weight = top_k_weights[..., i].unsqueeze(-1)
            
            for e_idx in range(self.n_experts):
                mask = (expert_idx == e_idx)
                if mask.any():
                    selected = x[mask]
                    expert_out[mask] += weight[mask] * self.experts[e_idx](selected)
        
        # 4. Shared + routed fusion
        output = shared_out + expert_out
        return output, gate_logits
    
    def compute_auxiliary_loss(self, gate_logits):
        """Load balancing auxiliary loss"""
        gate_probs = F.softmax(gate_logits, dim=-1)
        load = gate_probs.sum(dim=(0, 1))
        load = load / load.sum()
        target = torch.ones_like(load) / self.n_experts
        aux_loss = F.kl_div(load.log(), target, reduction='batchmean')
        return aux_loss * 0.01

2.2 V4-Flash Inference Optimization

V4-Flash further optimizes inference efficiency over V4 with three key strategies:

  1. KV Cache Quantization: Compressing KV Cache from FP16 to INT8, reducing memory by 50% and doubling long-sequence inference throughput
  2. Prefill-Decode Separation: Splitting prefill and decode stages across different GPU clusters to avoid compute contention
  3. Dynamic Expert Load Balancing: Dynamically adjusting routing strategy based on real-time token distribution to prevent “hot expert” overload
// V4-Flash Inference Engine Dynamic Expert Scheduler (Go)
package main

import (
	"context"
	"fmt"
	"log"
	"math"
	"sync"
	"time"
)

type ExpertLoadTracker struct {
	mu        sync.RWMutex
	loads     []float64
	threshold float64
}

func NewExpertLoadTracker(numExperts int, threshold float64) *ExpertLoadTracker {
	return &ExpertLoadTracker{
		loads:     make([]float64, numExperts),
		threshold: threshold,
	}
}

func (t *ExpertLoadTracker) RecordTokenRouting(expertIdx int) {
	t.mu.Lock()
	defer t.mu.Unlock()
	t.loads[expertIdx]++
}

func (t *ExpertLoadTracker) GetBalanceScore() float64 {
	t.mu.RLock()
	defer t.mu.RUnlock()
	
	total := 0.0
	for _, l := range t.loads {
		total += l
	}
	if total == 0 {
		return 1.0
	}
	
	mean := total / float64(len(t.loads))
	variance := 0.0
	for _, l := range t.loads {
		diff := l/mean - 1.0
		variance += diff * diff
	}
	variance /= float64(len(t.loads))
	return 1.0 / (1.0 + variance)
}

type DynamicRouter struct {
	baseGate       func(context.Context, []float32) []int
	tracker        *ExpertLoadTracker
}

func NewDynamicRouter(
	baseGate func(context.Context, []float32) []int,
	tracker *ExpertLoadTracker,
) *DynamicRouter {
	return &DynamicRouter{
		baseGate: baseGate,
		tracker:  tracker,
	}
}

func (r *DynamicRouter) Route(ctx context.Context, tokenEmbedding []float32) int {
	baseExperts := r.baseGate(ctx, tokenEmbedding)
	
	r.tracker.mu.RLock()
	balanceScore := r.tracker.GetBalanceScore()
	loadVariance := r.computeLoadVariance()
	r.tracker.mu.RUnlock()
	
	if balanceScore < r.tracker.threshold {
		adjustedExpert := r.adjustForBalance(baseExperts[0], loadVariance)
		r.tracker.RecordTokenRouting(adjustedExpert)
		return adjustedExpert
	}
	
	r.tracker.RecordTokenRouting(baseExperts[0])
	return baseExperts[0]
}

func (r *DynamicRouter) computeLoadVariance() []float64 {
	total := 0.0
	for _, l := range r.tracker.loads {
		total += l
	}
	if total == 0 {
		return make([]float64, len(r.tracker.loads))
	}
	
	mean := total / float64(len(r.tracker.loads))
	loadVariance := make([]float64, len(r.tracker.loads))
	for i, l := range r.tracker.loads {
		loadVariance[i] = l/mean - 1.0
	}
	return loadVariance
}

func (r *DynamicRouter) adjustForBalance(currentExpert int, loadVariance []float64) int {
	minLoad := math.Inf(1)
	minIdx := currentExpert
	for i, v := range loadVariance {
		if v < minLoad {
			minLoad = v
			minIdx = i
		}
	}
	return minIdx
}

type MoEInferenceEngine struct {
	numExperts    int
	topK          int
	routers       []*DynamicRouter
	loadTracker   *ExpertLoadTracker
}

func NewMoEInferenceEngine(numExperts, topK int) *MoEInferenceEngine {
	tracker := NewExpertLoadTracker(numExperts, 0.8)
	
	baseGateFn := func(ctx context.Context, emb []float32) []int {
		return []int{int(emb[0]) % numExperts}
	}
	
	routers := make([]*DynamicRouter, numExperts)
	for i := 0; i < numExperts; i++ {
		routers[i] = NewDynamicRouter(baseGateFn, tracker)
	}
	
	return &MoEInferenceEngine{
		numExperts:  numExperts,
		topK:        topK,
		routers:     routers,
		loadTracker: tracker,
	}
}

func main() {
	engine := NewMoEInferenceEngine(128, 8)
	ctx := context.Background()
	testInput := make([]float32, 4096)
	
	for i := 0; i < 1000; i++ {
		_ = engine.routers[0].Route(ctx, testInput)
		if i%100 == 0 {
			fmt.Printf("Step %d: balance=%.3f\n", 
				i, engine.loadTracker.GetBalanceScore())
		}
	}
}

III. FP8 Mixed-Precision Training: Squeezing Every Watt of Compute

What amazes the industry most is DeepSeek’s self-developed FP8 mixed-precision training framework. While Anthropic and OpenAI rely on FP16/BF16 training, DeepSeek achieves equivalent (or even superior) training results at FP8 precision through self-developed precision compensation strategies and communication libraries.

3.1 The Core Challenge of FP8 Training

FP8 faces significant numerical precision loss compared to FP16:

  • FP16: 1 sign + 5 exponent + 10 mantissa bits → ~3 significant digits of precision
  • FP8 E4M3: 1 sign + 4 exponent + 3 mantissa bits → ~1 significant digit of precision
  • FP8 E5M2: 1 sign + 5 exponent + 2 mantissa bits → suitable for gradients
# DeepSeek-style FP8 Precision Scaler
import torch
import torch.nn as nn

class FP8Scaler:
    """
    DeepSeek-style FP8 precision scaler
    Fine-grained per-layer scale factor control
    """
    def __init__(self, model, scale_init=1.0):
        self.scales = {}
        for name, param in model.named_parameters():
            if 'attention' in name:
                self.scales[name] = scale_init * 2.0
            elif 'mlp' in name:
                self.scales[name] = scale_init * 1.5
            else:
                self.scales[name] = scale_init * 1.0
    
    def quantize_to_fp8(self, tensor, layer_name):
        """Quantize FP32/BF16 tensor to FP8 E4M3"""
        scale = self.scales[layer_name]
        fp8_max = 448.0  # E4M3 maximum
        
        scaled = tensor * scale
        clipped = torch.clamp(scaled, -fp8_max, fp8_max)
        
        step_size = fp8_max / 448.0
        quantized = torch.round(clipped / step_size) * step_size
        
        quant_error = (tensor - quantized / scale).abs().mean().item()
        return quantized / scale, quant_error
    
    def update_scale(self, layer_name, quant_error, target_error=0.01):
        """Dynamically adjust scale factor"""
        current_scale = self.scales[layer_name]
        
        if quant_error > target_error * 1.5:
            self.scales[layer_name] = current_scale * 1.1
        elif quant_error < target_error * 0.5:
            self.scales[layer_name] = current_scale * 0.95
        
        self.scales[layer_name] = max(0.5, min(8.0, self.scales[layer_name]))


class FP8Linear(nn.Module):
    """DeepSeek-style FP8 linear layer"""
    def __init__(self, in_features, out_features, bias=True):
        super().__init__()
        self.weight = nn.Parameter(
            torch.randn(out_features, in_features, dtype=torch.bfloat16)
        )
        if bias:
            self.bias = nn.Parameter(
                torch.zeros(out_features, dtype=torch.bfloat16)
            )
        else:
            self.register_parameter('bias', None)
        self.scaler = None
    
    def forward(self, x):
        weight_fp8, w_error = self.scaler.quantize_to_fp8(
            self.weight, f"weight_{self.in_features}x{self.out_features}"
        )
        x_fp8, x_error = self.scaler.quantize_to_fp8(x, f"input_{self.in_features}")
        
        with torch.no_grad():
            out_fp32 = torch.matmul(x_fp8.float(), weight_fp8.float().t())
            quant_noise = torch.randn_like(out_fp32) * 0.001
            out_fp32 = out_fp32 + quant_noise
        
        if self.bias is not None:
            out_fp32 = out_fp32 + self.bias.float()
        
        out = out_fp32.bfloat16()
        
        if self.training:
            self.scaler.update_scale(
                f"weight_{self.in_features}x{self.out_features}", w_error
            )
        
        return out


class FP8TrainingManager:
    """FP8 training full-process manager"""
    def __init__(self, model):
        self.model = model
        self.scaler = FP8Scaler(model)
        self._register_fp8_layers()
    
    def _register_fp8_layers(self):
        for name, module in self.model.named_modules():
            if isinstance(module, FP8Linear):
                module.scaler = self.scaler
    
    def train_step(self, batch, optimizer, loss_fn):
        optimizer.zero_grad()
        outputs = self.model(batch['input'])
        loss = loss_fn(outputs, batch['target'])
        loss.backward()
        torch.nn.utils.clip_grad_norm_(self.model.parameters(), max_norm=1.0)
        optimizer.step()
        return loss.item()

3.2 Self-Developed Communication Library: Bypassing NCCL’s Limitations

NVIDIA’s NCCL doesn’t natively support the customized communication patterns required by DeepSeek’s FP8 training. DeepSeek developed its own communication library with:

  1. Asynchronous Pipeline Parallel Communication: Fully overlapping computation with communication
  2. FP8 Gradient AllReduce: Gradient communication at FP8 precision, reducing bandwidth by 50%
  3. Topology-Aware Expert Placement: Placing experts on the same physical node based on network topology to maximize NVLink utilization

IV. Full-Stack Infrastructure: The Multiplicative Effect of Compute Efficiency

The biggest difference between DeepSeek and Anthropic is: Anthropic can rely on “unlimited compute” from AWS and GCP, while DeepSeek, constrained by chip export restrictions, must optimize at the infrastructure level. This “forced capability” has become DeepSeek’s deepest moat.

4.1 Four-Layer Co-optimization

DeepSeek’s infrastructure optimization is not a single-point breakthrough but a multiplicative effect of four-layer co-optimization:

Layer Strategy Effect
Algorithm Fine-grained MoE + Shared Expert Isolation Active params reduced to 5-10% of total
Precision FP8 training + Dynamic scaling 2× compute efficiency per unit
Network Custom comm library + Topology-aware routing 30% reduction in cross-node communication
Framework INT8 KV Cache + Prefill-Decode separation 2-3× inference throughput
# DeepSeek Infrastructure Performance Modeling
import numpy as np
from dataclasses import dataclass

@dataclass
class InfraConfig:
    num_gpus: int
    gpu_memory: int
    precision: str
    num_experts: int
    top_k: int

class DeepSeekInfraOptimizer:
    def __init__(self, config: InfraConfig):
        self.config = config
    
    def estimate_training_throughput(self, model_size: int):
        base_mfu = 0.45
        
        if self.config.precision == 'fp8':
            base_mfu *= 1.8
            quant_ratio = 0.5
        else:
            quant_ratio = 1.0
        
        moe_comm_factor = self.config.top_k / self.config.num_experts
        comm_overhead = 0.15 * moe_comm_factor
        
        effective_capacity = self.config.num_gpus * 312 * base_mfu
        effective_capacity *= (1 - comm_overhead)
        effective_capacity *= quant_ratio
        
        tokens_per_second = effective_capacity * 1e12 / (model_size * 6)
        
        return {
            'effective_tflops': effective_capacity,
            'tokens_per_second': tokens_per_second,
            'mfu': base_mfu * 100,
        }
    
    def recommend_strategy(self, model_size: int):
        if self.config.num_gpus >= 256:
            return "8-way tensor parallelism + 4-way pipeline + ZeRO-3"
        elif self.config.num_gpus >= 64:
            return "4-way tensor parallelism + gradient checkpointing"
        else:
            return "ZeRO-3 + single-node expert parallelism"


def simulate():
    configs = [
        InfraConfig(64, 80, 'fp8', 128, 8),
        InfraConfig(256, 80, 'fp8', 256, 8),
        InfraConfig(1024, 80, 'bf16', 256, 12),
    ]
    
    for i, cfg in enumerate(configs):
        print(f"\nConfig {i+1}: {cfg.num_gpus}×H100 ({cfg.precision})")
        opt = DeepSeekInfraOptimizer(cfg)
        perf = opt.estimate_training_throughput(671e9)
        print(f"  MFU: {perf['mfu']:.1f}%")
        print(f"  Tokens/s: {perf['tokens_per_second']:.0f}")
        print(f"  Strategy: {opt.recommend_strategy(671e9)}")

if __name__ == "__main__":
    simulate()

V. Harness Framework: Model + Harness = Agent

The core narrative of DeepSeek’s funding is not “bigger models” but transforming model capabilities into agent products. The strategic formula is elegantly simple:

Model + Harness = Agent

The Harness team, led by ACM gold medalist Cui Tianyi, targets Anthropic’s Claude Code directly.

5.1 Harness Architecture

# DeepSeek Harness Core Architecture
from dataclasses import dataclass
from typing import List, Optional, Dict, Any, Callable
import asyncio
import json

@dataclass
class Action:
    type: str  # 'think', 'act', 'observe', 'reflect'
    tool: Optional[str]
    params: Dict[str, Any]
    reasoning: str

class ContextManager:
    """Ultra-long context management and compression"""
    def __init__(self, max_tokens: int = 128000):
        self.max_tokens = max_tokens
        self.history: List[Dict] = []
    
    def add_turn(self, role: str, content: str):
        self.history.append({
            'role': role,
            'content': content,
            'tokens': self._estimate_tokens(content)
        })
        self._maybe_compress()
    
    def _estimate_tokens(self, text: str) -> int:
        return int(len(text) * 1.5)
    
    def _maybe_compress(self):
        total = sum(t['tokens'] for t in self.history)
        if total > self.max_tokens * 0.9:
            recent = self.history[-10:]
            self.history = [
                {'role': 'system', 'content': '[Compressed history]', 'tokens': 0}
            ] + recent


class SelfCorrectingLoop:
    """Automatic error correction and retry"""
    def __init__(self, max_retries: int = 3):
        self.max_retries = max_retries
        self.attempts: List[Dict] = []
    
    async def execute_with_retry(self, action: Action, executor) -> Dict:
        for attempt in range(1, self.max_retries + 1):
            try:
                if action.tool:
                    result = await executor.execute(action.tool, action.params)
                else:
                    result = {"status": "ok"}
                self.attempts.append({'attempt': attempt, 'success': True})
                return result
            except Exception as e:
                self.attempts.append({'attempt': attempt, 'success': False})
                if attempt < self.max_retries:
                    action = self._apply_correction(action, str(e))
        
        raise RuntimeError("All retries failed")
    
    def _apply_correction(self, action: Action, error: str) -> Action:
        if 'timeout' in error.lower():
            action.params['max_tokens'] = min(
                action.params.get('max_tokens', 4096), 2048
            )
        return action


class DeepSeekHarness:
    """Model + Harness = Agent"""
    def __init__(self, tools: List[Callable]):
        self.context = ContextManager()
        self.executor = ToolExecutor()
        self.correction = SelfCorrectingLoop()
        
        for tool in tools:
            self.executor.register(tool.__name__, tool)
    
    async def run(self, goal: str) -> Dict:
        self.context.add_turn('user', goal)
        
        for step in range(20):
            action = await self._plan_next_action()
            if action.type == 'think' and action.tool is None:
                break
            
            result = await self.correction.execute_with_retry(action, self.executor)
            self.context.add_turn('tool', json.dumps(result))
        
        return {'goal': goal, 'steps': step + 1}


class ToolExecutor:
    def __init__(self):
        self.tools: Dict[str, Callable] = {}
    
    def register(self, name: str, func: Callable):
        self.tools[name] = func
    
    async def execute(self, tool: str, params: Dict) -> Any:
        if tool not in self.tools:
            raise ValueError(f"Unknown tool: {tool}")
        
        if asyncio.iscoroutinefunction(self.tools[tool]):
            return await self.tools[tool](**params)
        return self.tools[tool](**params)


async def main():
    print("=== DeepSeek Harness Demo ===")
    
    async def code_generate(spec: str) -> str:
        return f"# Generated code\n{spec}"
    
    harness = DeepSeekHarness(tools=[code_generate])
    result = await harness.run("Write a Python async web scraper")
    print(f"Completed: {result['steps']} steps")

if __name__ == "__main__":
    asyncio.run(main())

VI. What Will This $7.4 Billion Reshape?

6.1 Redrawing the Compute Map

DeepSeek is transitioning from “renting server rooms” to “building massive data centers”:

  • Ulancab Intelligent Computing Center in Inner Mongolia: targeting MW-to-GW scale
  • Deep collaboration with domestic chips (Huawei Ascend, Cambricon, etc.)
  • Goal: Build a multi-cloud + dedicated cluster system similar to Anthropic

6.2 China’s AI Industry Restructuring

This funding marks China’s AI transition from the “Hundred Models War” to a “Three Kingdoms” era:

Camp Representatives Strategy
Alibaba+ByteDance Qwen, Doubao Full-stack self-developed + ecosystem
Tencent+DeepSeek+JD+NetEase DeepSeek ecosystem Traffic + scenario empowerment
State funds+Industry National fund + CATL AI + real economy infrastructure

6.3 Impact on Developers

  • API price reduction: $7.4B infrastructure investment will drive unit compute costs down
  • Agent ecosystem explosion: Open-source Harness will spawn countless DeepSeek-based agents
  • Domestic chip acceleration: 8 domestic AI chip providers have completed DeepSeek-V4 full adaptation

VII. Conclusion

$7.4 billion marks China’s AI critical leap from “lab” to “infrastructure provider.” DeepSeek’s technical approach — extreme MoE optimization + FP8 precision engineering + full-stack infrastructure + Harness agent framework — forms a unique “cost-performance” moat.

As Liang Wenfeng said during the fundraising roadshow: “On the table to AGI, money is just an entry ticket. The true throne belongs only to the ‘madmen’ who obsess over technology.”

When Anthropic’s Fable 5 API costs 138× more than DeepSeek’s, when GLM-5.2 is open-sourced under MIT license and tops the global available model rankings, when DeepSeek-V4-Flash leads global call volume for five consecutive weeks — China’s AI story is no longer about “catching up,” but about “defining.”


References

  1. 36Kr, “Talk AI: Where Will DeepSeek’s ¥50B Go?”, 2026-06-22
  2. TMTPost, “Where Will DeepSeek’s ¥50B Go?”, 2026-06-23
  3. ZAKER News, “The Logic and Hidden Concerns Behind DeepSeek’s ¥400B Valuation”, 2026-06-22
  4. Sina Finance, “Liang Wenfeng’s ‘Overlord Clause’”, 2026-06-22
  5. Securities Times, “Zhipu Market Cap Breaks ¥1 Trillion”, 2026-06-23
  6. Guancha.cn, “Tang Jie Responds to Musk: Sooner Than You Think”, 2026-06-23
  7. 36Kr, “DeepSeek Desperately Hiring, Including Foreigners”, 2026-06-22
  8. Science and Technology Innovation Board Daily, “DeepSeek $7.4B Funding Analysis”, 2026-06-21