拓冰建站拓冰建站
首页 / 资讯中心 / 正文

tinygrad Showcase 实战指南:在 tiny 框架上运行 EfficientNet、YOLOv8、Whisper 与 Stable Diffusion

tinygrad Showcase 实战指南在 tiny 框架上运行 EfficientNet、YOLOv8、Whisper 与 Stable Diffusion【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygradtinygrad 是一个以极简内核著称的深度学习框架而本仓库的 docs/showcase.md 恰恰证明了它的小与能并不矛盾从视觉领域的 EfficientNet、YOLOv8到音频领域的 Whisper再到生成式方向的 Stable Diffusion、LLaMA 与多角色语音对话全部可以直接在本仓库的examples/目录下运行。本文将逐模块拆解这些示例的启动命令、依赖要求、关键源码结构与底层实现帮助你从能跑通进阶到看得懂、改得动。一、概览一个小库能装下多少 SOTA 模型showcase 文档开篇即点明主旨Despite being a tiny library, tinygrad is capable of doing a lot of things——尽管 tinygrad 体积很小它依然能够运行从 EfficientNet视觉 中的后端分发到 CPU / CUDA / Metal / OpenCL / AMD 等设备上执行。本文涉及的模型与示例文件对应关系如下领域模型示例入口VisionEfficientNetB0–B8 分类extra/models/efficientnet.pyVisionYOLOv8n/s/m/l/x 目标检测examples/yolov8.pyAudioWhispertiny/base/small 语音识别examples/whisper.pyGenerativeStable Diffusion文生图examples/stable_diffusion.pyGenerativeLLaMA多代际大语言模型examples/llama.pyGenerativeConversation语音对话机器人基于 examples/llama.py 的交互扩展二、Vision图像分类与目标检测2.1 EfficientNet单张图片分类与实时摄像头识别showcase 文档给出两种运行方式传入图片 URL/路径进行识别或连接摄像头实时识别。# 方式一识别一张图片可传入本地路径或图片 URL python3 examples/efficientnet.py ./test/models/efficientnet/Chicken.jpg # 方式二使用摄像头实时检测需要 OpenCV 与摄像头 python3 examples/efficientnet.py webcam仓库自带两张可立即用于测试的样例图片test/models/efficientnet/Chicken.jpg 与 test/models/efficientnet/car.jpg。源码结构模型定义在 extra/models/efficientnet.py核心类EfficientNet通过number参数选择 B0–B8 及 L2 的宽度/深度缩放系数global_params [ (1.0, 1.0), # b0 (1.0, 1.1), # b1 (1.1, 1.2), # b2 ... (4.3, 5.3), # l2 ][max(number, 0)]网络主干由 7 组 MBConvBlock带 SE 注意力堆叠而成并在 forward 中完成 stem 卷积、全局平均池化与最终全连接分类def forward(self, x): x self._bn0(x.conv2d(self._conv_stem, padding(0,1,0,1), stride2)).swish() x x.sequential(self._blocks) x self._bn1(x.conv2d(self._conv_head)).swish() x x.avg_pool2d(kernel_sizex.shape[2:4]) x x.reshape(shape(-1, x.shape[1])) return x.linear(self._fc, self._fc_bias) if self._fc is not None else x值得注意的是load_from_pretrainedextra/models/efficientnet.py直接加载 PyTorch 官方 EfficientNet 的.pth权重通过torch_loadreplace完成参数搬运无需任何格式转换脚本——这体现了 tinygrad 对既有生态权重的高度兼容性。示例脚本还支持examples/compile_efficientnet.py这类配套入口可用于将模型编译成独立可执行文件。2.2 YOLOv8五种规模的实时目标检测showcase 文档推荐直接查看 examples/yolov8.py。该脚本的用法为# 用法python3 yolov8.py 图片URL或路径 模型变体可选默认 n python3 examples/yolov8.py ./test/models/efficientnet/Chicken.jpg n从 main 入口 可以看到脚本支持n / s / m / l / x五种变体它们通过 get_variant_multiples 中的缩放系数depth、width、ratio区分def get_variant_multiples(variant): return {n:(0.33, 0.25, 2.0), s:(0.33, 0.50, 2.0), m:(0.67, 0.75, 1.5), l:(1.0, 1.0, 1.0), x:(1, 1.25, 1.0) }.get(variant, None)完整推理流水线包含以下关键环节预处理preprocess将输入图像 resize 到 640×640、BGR 转 RGB、通道维前置并归一化到0.0–1.0模型推理YOLOv8类examples/yolov8.py由 Conv_Block、Bottleneck、C2f跨阶段部分连接、SPPF空间金字塔池化和 Upsample源自 PR #784 的 nearest 上采样实现见 examples/yolov8.py构成后处理postprocess置信度阈值过滤默认conf_threshold0.25、TopK 选取最多max_det300个框并基于 IoU 矩阵阈值0.45结合类别掩码完成 NMS可视化draw_bounding_boxes_and_save在./outputs_yolov8/目录下输出带类别标签、置信度和彩色边框的检测图。权重获取脚本通过 get_weights_location 自动下载 YOLOv8 的.safetensors权重fetch到weights/目录若检测到 fp16 权重还会自动转成 fp32 以便 CPU 等后端加载。仓库还提供了 ONNX 路线的参考实现 examples/yolov8-onnx.py它借助 ultralytics 将yolov8n-seg.pt导出为 ONNX再交给 tinygrad 的OnnxRunner位于 tinygrad/nn/onnx.py直接执行展示了 tinygrad 对 ONNX 图的原生支持能力。三、AudioWhisper 语音识别showcase 文档指出运行 Whisper 需要安装pyaudio和torchaudio随后执行SMALL1 python3 examples/whisper.py环境变量语义SMALL1会切换加载模型规格对应 examples/whisper.py 中的逻辑model, enc init_whisper(small.en if getenv(SMALL) else tiny.en, batch_size1)即默认使用tiny.en模型设置SMALL1后改用small.en。可选的模型名tiny.en / tiny / base.en / base / small.en等与下载地址统一维护在 MODEL_URLSinit_whisperexamples/whisper.py负责自动fetch权重、用torch_load加载 PyTorch 格式的.pt权重并load_state_dict组装模型。两种运行模式转写文件python3 examples/whisper.py 音频文件经 transcribe_file 用 librosa 以 16kHz 采样率读取后走完整转写流程在线聆听不带参数运行时listener 通过 pyaudio 打开麦克风流16kHz、单声道、每块 1600 样本以多进程队列方式把 10 秒窗口的音频喂给模型做流式转写。核心算法细节音频首先在 prep_audio 中被切分为 30 秒片段、做 mel 频谱图与对数归一化随后Whisper模型的 AudioEncoder卷积 Transformer 编码器与 Decoder 配合以上一轮预测 token 作为下一轮输入的自回归方式见 transcribe_waveform逐步生成文本直到遇到|endoftext|或达到max_self_attn_cache_len长度上限。MultiHeadAttention中的 KV cache 机制examples/whisper.py通过TinyJit与assign原地更新缓存张量避免了逐帧重复计算。四、Generative生成式模型4.1 Stable Diffusion文本生成图像showcase 文档给出的最小运行命令python3 examples/stable_diffusion.py默认提示词为a horse sized cat eating a bagel即文档配图所展示的示例。实际上该脚本的完整入口examples/stable_diffusion.py暴露了丰富的可调参数参数默认值说明--steps6扩散去噪步数--prompta horse sized cat eating a bagel生成提示词--out系统临时目录rendered.png输出图片路径--noshowFalse不自动弹出显示图片--fp16False将权重转为 float16--timingFalse打印每步耗时--seedNone固定随机潜变量种子--guidance7.5提示词引导强度--fakeweightsFalse跳过权重加载仅测试用完整流水线对应 main 代码依次为加载权重fetch下载sd-v1-4.ckpttorch_load解析后load_state_dict装入模型--fakeweights可跳过CLIP 文本编码用 extra/models/clip.py 的Tokenizer与FrozenOpenClipEmbedder分别编码条件提示词与空字符串无条件上下文DDIM 采样从1到1000均匀取--steps个 timestep用--seed初始化4×64×64随机噪声潜变量经TinyJit编译的run逐步去噪--guidance控制提示词条件强度解码成图潜变量经StableDiffusion内置的 VAE DecoderResnetBlock AttnBlock 上采样见 examples/stable_diffusion.py还原为 512×512 图像并保存。可复现性验证脚本内置校验逻辑examples/stable_diffusion.py——当以默认提示词、--steps 6 --seed 0 --guidance 7.5运行时会将输出与仓库预置的 examples/stable_diffusion_seed0.png 计算均方误差并断言低于3e-3确保任何后端的实现一致性。4.2 LLaMA多代际大语言模型对话showcase 文档说明需要先下载权重放入weights/LLaMA目录目录不存在时需自行创建然后运行python3 examples/llama.py从 examples/llama.py 的 argparse 入口可以看到该脚本支持的完整参数参数默认值说明--promptNone起始文本不传则进入聊天机器人模式--count1000最多生成的 token 数--personalityStacy人格可选 Stacy / George / Gary / Lexie--temperature0.7softmax 采样温度--timingFalse打印每 token 耗时--profileFalse输出 profile 数据到 out.prof--gen1模型代际1 / 2 / 3 / code / tiny--size每代际首个模型尺寸如 7B、13B、70B、8B 等--quantizeNone权重量化int8或nf4--modelNone自定义权重目录或.index.json/.safetensors/.bin文件--shard1多设备分片数量代际与尺寸映射MODEL_PARAMSexamples/llama.py中维护了 LLaMA-1/2/3、Code LLaMA 与 TinyLLaMA 的完整结构参数表例如 LLaMA-1 7B 为dim4096, n_heads32, n_layers32, hidden_dim11008LLaMA-3 8B 采用 GQAn_kv_heads8与rope_theta500000。代码注释还解释了 SwiGLU 下 hidden_dim 需取传统 Transformer 的 2/3 以保持参数量一致的数学依据。权重加载与部署细节LLaMa.buildexamples/llama.py支持从多分片consolidated.*.pth权重拼接加载concat_weights、HuggingFace 权重自动转换convert_from_huggingface、int8/nf4内存量化以及shard多设备张量并行——注意力权重沿最后一维切分、FFN 的 w1/w3 沿第 0 维切分。人格系统则由内置的 pre-prompt 与 few-shot 示例实现examples/llama.py四种人格各有独立的提示模板与对话分隔符。验证方式脚本内置确定性校验examples/llama.py当以--temperature0 --count10 --promptHello.运行时会断言输出与预置的期望文本一致如 gen1/7B 应输出Hello. Im a 20 year old male可用作环境与权重的正确性检查。4.3 Conversation与 Stacy 语音对话showcase 文档还介绍了基于 LLaMA 的语音对话体验# 前置条件安装 espeak并设置 PHONEMIZER_ESPEAK_LIBRARY python3 examples/conversation.py文档明确要求确保系统安装了espeak且设置了环境变量PHONEMIZER_ESPEAK_LIBRARY指向 espeak 的共享库路径随后即可与 Stacy 进行语音对话。这一功能依赖外部 TTS/语音管线完成语音合成LLaMA 侧则复用了上文所述的多角色对话能力。仓库的examples/conversation_data/目录下存放了各人格Stacy、George、Lexie 等的 pre-prompt 配置如 examples/conversation_data/pre_prompt_stacy.yaml方便以配置文件方式定制人格而不改代码。五、深入源码这些示例如何共用 tinygrad 能力观察上述六个示例可以发现它们都建立在 tinygrad 同一套核心机制之上统一算子与自动调度所有模型仅用 tinygrad/tensor.py 中的Tensor及其卷积、注意力、归一化等算子表达无需为不同后端编写专属 kernel图编译与 JITWhisper 与 Stable Diffusion 使用TinyJit将推理循环编译为静态图见 tinygrad/engine/jit.py避免重复调度开销权重生态兼容通过 tinygrad/nn/state.py 的torch_load/safe_load/load_state_dict直接读取 PyTorch 与 safetensors 权重这是 EfficientNet、Whisper、Stable Diffusion、LLaMA 能无缝复用官方权重的基础网络权重自动获取所有示例通过tinygrad.helpers.fetch在首次运行时自动下载权重无需手动处理LLaMA 例外文档要求手动放置到weights/LLaMA测试佐证仓库测试集中存在大量针对这些模型的验证用例例如 test/models/test_mnist.py、test/unit/test_conv.py以及 Whisper 的 test/models/test_whisper.py配套音频在 test/models/whisper/为示例的正确性提供了持续回归保障。六、快速上手清单与注意事项安装依赖除 tinygrad 本体外按需安装librosa、pyaudioWhisper、torchaudioWhisper 文档要求、opencv-pythonYOLOv8、sentencepiecetiktokenblobfileLLaMA见 examples/llama.py 顶部注释选择后端脚本启动时会打印using {Device.DEFAULT} backend可通过DEBUG、Device相关环境变量选择 CPU/CUDA/Metal 等设备首次运行联网下载权重EfficientNet、YOLOv8、Whisper、Stable Diffusion 都会自动fetch权重LLaMA 需手动将权重放入weights/LLaMA{1,2,3,code,tiny}/对应子目录验证运行正确性利用各脚本内置的确定性校验Stable Diffusion 的 MSE 断言、LLaMA 的温度 0 输出断言确认环境无误参考测试遇到问题可对照 test/models/ 与 test/unit/ 下的同名测试它们展示了官方认可的调用方式与期望输出。从一行命令跑通图像分类到在本地复现 Stable Diffusion 与 LLaMA 对话docs/showcase.md 所呈现的这六个示例正是理解 tinygrad以最小内核驱动最大模型设计哲学的最佳入口。结合源码逐行阅读后你完全可以在此基础上替换权重、修改网络结构甚至把这些推理流程编译部署到自己的设备上。【免费下载链接】tinygradYou like pytorch? You like micrograd? You love tinygrad! ❤️项目地址: https://gitcode.com/GitHub_Trending/tiny/tinygrad创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
分享:

看完干货,该让你的企业上线了

免费需求沟通 · 48 小时内出具建站方案 · 河南本地可上门