# lab02_calculator.py —— H3与Qwen3.8 128B 显存及方案性价比计算器
def calc_model_size(param_billion, bits):
"""计算模型权重体积 (GB)"""
return (param_billion * 1e9 * bits) / 8 / (1024**3)
def calc_kv_cache(context_len, batch_size=1):
"""粗略估算KV Cache占用 (GB),按经验值折算"""
# 假设 32K 上下文单请求约 1GB,按比例和并发数放大
base_32k_gb = 1.0
return (context_len / 32768) * base_32k_gb * batch_size
def calc_value(price_wan, speed_tok_s):
"""计算性价比 (tok/s/万元)"""
return speed_tok_s / price_wan
if __name__ == '__main__':
print("=== 1. 模型体积与显存需求推导 ===")
params = 128 # 128B
size_int4 = calc_model_size(params, 4)
size_int8 = calc_model_size(params, 8)
size_fp16 = calc_model_size(params, 16)
print(f"128B 模型体积:")
print(f" INT4: {size_int4:.1f} GB")
print(f" INT8: {size_int8:.1f} GB")
print(f" FP16: {size_fp16:.1f} GB")
kv_cache = calc_kv_cache(context_len=32768, batch_size=4)
h3_size = 12.0
print(f"\nKV Cache (32K上下文, 4并发): 约 {kv_cache:.1f} GB")
print(f"MiniMax H3 (pruned INT8): {h3_size:.1f} GB")
print("\n=== 2. 三方案性价比对比 ===")
# 方案数据: (名称, 显存+内存, 出词速度, H3耗时, 总价, 性价比)
plans = [
{"name": "主推: 5090 32G + 128G DDR5", "speed": 20, "price": 8.54},
{"name": "对照A: 128G 统一内存", "speed": 10, "price": 2.50},
{"name": "对照B: 双卡 64G 工作站", "speed": 48, "price": 14.00}
]
for p in plans:
cpb = calc_value(p["price"], p["speed"])
print(f"{p['name']}:")
print(f" 价格: {p['price']} 万元 | 出词: {p['speed']} tok/s")
print(f" 性价比: {cpb:.2f} tok/s/万元\n")
print("=== 3. 预算分配核对 ===")
total_budget = 8.54
gpu_price = 5.24
mem_price = 2.20
print(f"总预算: {total_budget} 万")
print(f"GPU占比: {(gpu_price/total_budget)*100:.1f}% (目标55-60%)")
print(f"内存占比: {(mem_price/total_budget)*100:.1f}% (目标10%,因近期内存暴涨偏高)")