让 Mac 接上 NVIDIA / AMD 外置显卡,跑本地 AI 大模型
根据你的显卡品牌二选一执行。
brew install --cask docker
open /Applications/Docker.app
首次启动 Docker 需要在菜单栏看到 🐳 图标变绿,再继续。
curl -fsSL https://raw.githubusercontent.com/tinygrad/tinygrad/master/extra/setup_nvcc_osx.sh | sh
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.zshrc
curl -fsSL https://raw.githubusercontent.com/tinygrad/tinygrad/master/extra/setup_hipcomgr_osx.sh | sh
AMD 不需要 Docker。
curl -fsSL https://raw.githubusercontent.com/tinygrad/tinygrad/master/extra/setup_tinygpu_osx.sh | sh
执行后会弹出系统对话框:
点击 Open System Settings。
进入系统设置:
找到 TinyGPU,把右侧开关打开(变蓝)。
pip install tinygrad
# NVIDIA
DEV=NV python3 -c "from tinygrad import Device; print(Device['NV'])"
# AMD
DEV=AMD python3 -c "from tinygrad import Device; print(Device['AMD'])"
✅ 成功输出类似:
<tinygrad.runtime.ops_nv.NVDevice object at 0x...>
能看到外置 GPU 设备名(如 NVIDIA GeForce RTX 4090) → 物理连接 OK。
ioreg -p IODeviceTree -l -w 0 | grep -i "gpu\|nvidia\|amd\|radeon"
systemextensionsctl list | grep -i tinygpu
DEV=NV python3 -m tinygrad.llm
# AMD 用 DEV=AMD
如果 GPU 风扇响起来 + 终端开始吐 token → 跑通了 🎉
git clone https://github.com/tinygrad/tinygrad.git
cd tinygrad
DEV=NV JITBEAM=2 python3 examples/llama3.py --download_model
JITBEAM=2 让 tinygrad 搜索最优 kernel,首次启动慢,之后快。
| 症状 | 解决 |
|---|---|
| 系统设置找不到 TinyGPU 扩展 | 重启 Mac;确认 SIP 开启 |
扩展开了但 DEV=NV 报错 | 拔插 USB4 线;先开坞再开 Mac |
nvcc not found | source ~/.zshrc 或重开终端 |
| Docker 报错 | 确认菜单栏 🐳 图标在运行 |
| 识别成功但很慢 | 用 USB4 而非 USB 3.x;线长 ≤ 0.5m |
| Mac 睡眠后掉线 | 设置 → 锁屏 → 永不睡眠 |
把下面这段保存为 check_tinygpu.sh,跑一遍就知道是否成功:
#!/bin/bash
echo "=== TinyGPU 健康检查 ==="
echo "1. macOS 版本: $(sw_vers -productVersion)"
echo -n "2. 驱动扩展: "
systemextensionsctl list | grep -i tinygpu || echo "❌ 未启用"
echo "3. Thunderbolt 设备:"
system_profiler SPThunderboltDataType | grep -A 1 "Device Name" | head -10
echo "4. tinygrad 设备:"
DEV=NV python3 -c "from tinygrad import Device; print('NV:', Device['NV'])" 2>&1 | head -1
DEV=AMD python3 -c "from tinygrad import Device; print('AMD:', Device['AMD'])" 2>&1 | head -1
echo "=== 完成 ==="
chmod +x check_tinygpu.sh
./check_tinygpu.sh