[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"similar-flashlight--flashlight":3,"tool-flashlight--flashlight":61},[4,18,26,36,44,53],{"id":5,"name":6,"github_repo":7,"description_zh":8,"stars":9,"difficulty_score":10,"last_commit_at":11,"category_tags":12,"status":17},4358,"openclaw","openclaw\u002Fopenclaw","OpenClaw 是一款专为个人打造的本地化 AI 助手，旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚，能够直接接入你日常使用的各类通讯渠道，包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息，OpenClaw 都能即时响应，甚至支持在 macOS、iOS 和 Android 设备上进行语音交互，并提供实时的画布渲染功能供你操控。\n\n这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地，用户无需依赖云端服务即可享受快速、私密的智能辅助，真正实现了“你的数据，你做主”。其独特的技术亮点在于强大的网关架构，将控制平面与核心助手分离，确保跨平台通信的流畅性与扩展性。\n\nOpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者，以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力（支持 macOS、Linux 及 Windows WSL2），即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你",349277,3,"2026-04-06T06:32:30",[13,14,15,16],"Agent","开发框架","图像","数据工具","ready",{"id":19,"name":20,"github_repo":21,"description_zh":22,"stars":23,"difficulty_score":10,"last_commit_at":24,"category_tags":25,"status":17},3808,"stable-diffusion-webui","AUTOMATIC1111\u002Fstable-diffusion-webui","stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面，旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点，将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。\n\n无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师，还是想要深入探索模型潜力的开发者与研究人员，都能从中获益。其核心亮点在于极高的功能丰富度：不仅支持文生图、图生图、局部重绘（Inpainting）和外绘（Outpainting）等基础模式，还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外，它内置了 GFPGAN 和 CodeFormer 等人脸修复工具，支持多种神经网络放大算法，并允许用户通过插件系统无限扩展能力。即使是显存有限的设备，stable-diffusion-webui 也提供了相应的优化选项，让高质量的 AI 艺术创作变得触手可及。",162132,"2026-04-05T11:01:52",[14,15,13],{"id":27,"name":28,"github_repo":29,"description_zh":30,"stars":31,"difficulty_score":32,"last_commit_at":33,"category_tags":34,"status":17},1381,"everything-claude-code","affaan-m\u002Feverything-claude-code","everything-claude-code 是一套专为 AI 编程助手（如 Claude Code、Codex、Cursor 等）打造的高性能优化系统。它不仅仅是一组配置文件，而是一个经过长期实战打磨的完整框架，旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。\n\n通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能，everything-claude-code 能显著提升 AI 在复杂任务中的表现，帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略，使得模型响应更快、成本更低，同时有效防御潜在的攻击向量。\n\n这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库，还是需要 AI 协助进行安全审计与自动化测试，everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目，它融合了多语言支持与丰富的实战钩子（hooks），让 AI 真正成长为懂上",160015,2,"2026-04-18T11:30:52",[14,13,35],"语言模型",{"id":37,"name":38,"github_repo":39,"description_zh":40,"stars":41,"difficulty_score":32,"last_commit_at":42,"category_tags":43,"status":17},2271,"ComfyUI","Comfy-Org\u002FComfyUI","ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎，专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式，采用直观的节点式流程图界面，让用户通过连接不同的功能模块即可构建个性化的生成管线。\n\n这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景，也能自由组合模型、调整参数并实时预览效果，轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性，不仅支持 Windows、macOS 和 Linux 全平台，还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构，并率先支持 SDXL、Flux、SD3 等前沿模型。\n\n无论是希望深入探索算法潜力的研究人员和开发者，还是追求极致创作自由度的设计师与资深 AI 绘画爱好者，ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能，使其成为当前最灵活、生态最丰富的开源扩散模型工具之一，帮助用户将创意高效转化为现实。",109154,"2026-04-18T11:18:24",[14,15,13],{"id":45,"name":46,"github_repo":47,"description_zh":48,"stars":49,"difficulty_score":32,"last_commit_at":50,"category_tags":51,"status":17},6121,"gemini-cli","google-gemini\u002Fgemini-cli","gemini-cli 是一款由谷歌推出的开源 AI 命令行工具，它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言，它提供了一条从输入提示词到获取模型响应的最短路径，无需切换窗口即可享受智能辅助。\n\n这款工具主要解决了开发过程中频繁上下文切换的痛点，让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用，还是执行复杂的 Git 操作，gemini-cli 都能通过自然语言指令高效处理。\n\n它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口，具备出色的逻辑推理能力；内置 Google 搜索、文件操作及 Shell 命令执行等实用工具；更独特的是，它支持 MCP（模型上下文协议），允许用户灵活扩展自定义集成，连接如图像生成等外部能力。此外，个人谷歌账号即可享受免费的额度支持，且项目基于 Apache 2.0 协议完全开源，是提升终端工作效率的理想助手。",100752,"2026-04-10T01:20:03",[52,13,15,14],"插件",{"id":54,"name":55,"github_repo":56,"description_zh":57,"stars":58,"difficulty_score":32,"last_commit_at":59,"category_tags":60,"status":17},4721,"markitdown","microsoft\u002Fmarkitdown","MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具，专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片（含 OCR）、音频（含语音转录）、HTML 乃至 YouTube 链接等多种格式的解析，能够精准提取文档中的标题、列表、表格和链接等关键结构信息。\n\n在人工智能应用日益普及的今天，大语言模型（LLM）虽擅长处理文本，却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点，它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式，成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外，它还提供了 MCP（模型上下文协议）服务器，可无缝集成到 Claude Desktop 等 LLM 应用中。\n\n这款工具特别适合开发者、数据科学家及 AI 研究人员使用，尤其是那些需要构建文档检索增强生成（RAG）系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性，但其核心优势在于为机器",93400,"2026-04-06T19:52:38",[52,14],{"id":62,"github_repo":63,"name":64,"description_en":65,"description_zh":66,"ai_summary_zh":66,"readme_en":67,"readme_zh":68,"quickstart_zh":69,"use_case_zh":70,"hero_image_url":71,"owner_login":64,"owner_name":64,"owner_avatar_url":72,"owner_bio":73,"owner_company":74,"owner_location":74,"owner_email":75,"owner_twitter":74,"owner_website":74,"owner_url":76,"languages":77,"stars":105,"forks":106,"last_commit_at":107,"license":108,"difficulty_score":89,"env_os":109,"env_gpu":110,"env_ram":111,"env_deps":112,"category_tags":125,"github_topics":126,"view_count":32,"oss_zip_url":74,"oss_zip_packed_at":74,"status":17,"created_at":133,"updated_at":134,"faqs":135,"releases":163},9327,"flashlight\u002Fflashlight","flashlight","A C++ standalone library for machine learning","Flashlight 是一款由 Facebook AI Research 团队打造的纯 C++ 机器学习库，旨在为研究人员提供一个极速、灵活且轻量级的实验框架。它主要解决了传统深度学习框架在 C++ 环境下依赖复杂、体积庞大或定制困难的问题，让开发者能够直接在底层进行高效算法迭代，而无需牺牲性能。\n\n这款工具特别适合需要深入底层优化、追求极致运行效率的 AI 研究人员和 C++ 开发者。无论是语音识别、图像分类、目标检测还是语言建模，Flashlight 都能提供原生支持。其核心亮点在于极小的代码 footprint（核心仅约 20k 行代码，编译后小于 10MB），同时具备完全的内部可修改性，允许用户直接调整张量计算等底层 API。此外，它默认集成 ArrayFire 张量库，支持现代 C++ 的即时内核编译，确保了高性能的默认配置。作为一个独立的 standalone 库，Flashlight 摒弃了过多的预设限制，让用户能在一个仓库中快速构建和验证跨领域的创新模型。","[![CircleCI](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fflashlight\u002Fflashlight.svg?style=shield)](https:\u002F\u002Fapp.circleci.com\u002Fpipelines\u002Fgithub\u002Fflashlight\u002Fflashlight)\n[![Documentation Status](https:\u002F\u002Fimg.shields.io\u002Freadthedocs\u002Ffl.svg)](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002F)\n[![Docker Image Build Status](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fworkflow\u002Fstatus\u002Fflashlight\u002Fflashlight\u002FPublish%20Docker%20images?label=docker%20image%20build)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fflml\u002Fflashlight\u002Ftags)\n[![Join the chat at https:\u002F\u002Fgitter.im\u002Fflashlight-ml\u002Fcommunity](https:\u002F\u002Fimg.shields.io\u002Fgitter\u002Froom\u002Fflashlight-ml\u002Fcommunity)](https:\u002F\u002Fgitter.im\u002Fflashlight-ml\u002Fcommunity?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fflashlight\u002Fflashlight\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg?token=rBp4AilMc0)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fflashlight\u002Fflashlight)\n\n[![Docker Image for CUDA backend](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fflml\u002Fflashlight\u002Fcuda-latest?label=docker%20%28cuda%29&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fflml\u002Fflashlight\u002Ftags?page=1&ordering=last_updated&name=cuda-latest)\n[![Docker Image for CPU backend](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fflml\u002Fflashlight\u002Fcpu-latest?label=docker%20%28cpu%29&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fflml\u002Fflashlight\u002Ftags?page=1&ordering=last_updated&name=cpu-latest)\n\n[![Install CUDA backend with vcpkg](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?color=orange&label=get%20%28cuda%29&query=name&url=https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2Fvcpkg%2Fmaster%2Fports%2Fflashlight-cuda%2Fvcpkg.json&prefix=vcpkg%20install%20)](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cuda)\n[![Install CPU backend with vcpkg](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?color=orange&label=get%20%28cpu%29&query=name&url=https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2Fvcpkg%2Fmaster%2Fports%2Fflashlight-cpu%2Fvcpkg.json&prefix=vcpkg%20install%20)](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cpu)\n\n\nFlashlight is a fast, flexible machine learning library written entirely in C++\nfrom the Facebook AI Research and the creators of Torch, TensorFlow, Eigen and\nDeep Speech. Its core features include:\n- **Total internal modifiability** including [internal APIs for tensor computation](flashlight\u002Ffl\u002Ftensor\u002FREADME.md).\n- **A small footprint**, with the core clocking in at under 10 MB and 20k lines of C++.\n- **High-performance defaults** featuring just-in-time kernel compilation with modern C++ via the [*ArrayFire*](https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire)\ntensor library.\n- An emphasis on efficiency and scale.\n\nNative support in C++ and simple extensibility makes Flashlight a powerful research framework that enables fast iteration on new experimental setups and algorithms with little unopinionation and without sacrificing performance. In a single repository, Flashlight provides [apps](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Ftree\u002Fmaster\u002Fflashlight\u002Fapp) for research across multiple domains:\n- [Automatic speech recognition](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Ftree\u002Fmaster\u002Fflashlight\u002Fapp\u002Fasr) (formerly [wav2letter](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fwav2letter\u002F) project) — [Documentation](flashlight\u002Fapp\u002Fasr) | [Tutorial](flashlight\u002Fapp\u002Fasr\u002Ftutorial)\n- [Image classification](flashlight\u002Fapp\u002Fimgclass)\n- [Object detection](flashlight\u002Fapp\u002Fobjdet)\n- [Language modeling](flashlight\u002Fapp\u002Flm)\n\n### Project Layout\n\nFlashlight is broken down into a few parts:\n- [**`flashlight\u002Flib`**](flashlight\u002Flib) contains kernels and standalone utilities for audio processing and more.\n- [**`flashlight\u002Ffl`**](flashlight\u002Ffl) is the core tensor interface and neural network library using the [ArrayFire](https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire) tensor library by default.\n- [**`flashlight\u002Fpkg`**](flashlight\u002Fpkg) are domain packages for speech, vision, and text built on the core.\n- [**`flashlight\u002Fapp`**](flashlight\u002Fapp) are applications of the core library to machine learning across domains.\n\n## Quickstart\n\nFirst, [build and install Flashlight](#building-and-installing) and [link it to your own project](#building-your-own-project-with-flashlight).\n\n[`Sequential`](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fmodules.html#sequential) forms a sequence of Flashlight [`Module`](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fmodules.html#module)s for chaining computation.\n\n\u003Cdetails>\u003Csummary>Implementing a simple convnet is easy.\u003C\u002Fsummary>\n\n```c++\n#include \u003Cflashlight\u002Ffl\u002Fflashlight.h>\n\nSequential model;\n\nmodel.add(View(fl::Shape({IM_DIM, IM_DIM, 1, -1})));\nmodel.add(Conv2D(\n    1 \u002F* input channels *\u002F,\n    32 \u002F* output channels *\u002F,\n    5 \u002F* kernel width *\u002F,\n    5 \u002F* kernel height *\u002F,\n    1 \u002F* stride x *\u002F,\n    1 \u002F* stride y *\u002F,\n    PaddingMode::SAME; \u002F* padding mode *\u002F,\n    PaddingMode::SAME; \u002F* padding mode *\u002F));\nmodel.add(ReLU());\nmodel.add(Pool2D(\n    2 \u002F* kernel width *\u002F,\n    2 \u002F* kernel height *\u002F,\n    2 \u002F* stride x *\u002F,\n    2 \u002F* stride y *\u002F));\nmodel.add(Conv2D(32, 64, 5, 5, 1, 1, PaddingMode::SAME, PaddingMode::SAME));\nmodel.add(ReLU());\nmodel.add(Pool2D(2, 2, 2, 2));\nmodel.add(View(fl::Shape({7 * 7 * 64, -1})));\nmodel.add(Linear(7 * 7 * 64, 1024));\nmodel.add(ReLU());\nmodel.add(Dropout(0.5));\nmodel.add(Linear(1024, 10));\nmodel.add(LogSoftmax());\n```\n\nPerforming forward and backward computation is straightforwards:\n```c++\nauto output = model.forward(input);\nauto loss = categoricalCrossEntropy(output, target);\nloss.backward();\n```\n\n\u003C\u002Fdetails>\n\nSee the [MNIST example](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fmnist.html) for a full tutorial including a training loop and dataset abstractions.\n\n[`Variable`](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fvariable.html) is a tape-based abstraction that wraps [Flashlight tensors](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Fblob\u002Fmain\u002Fflashlight\u002Ffl\u002Ftensor\u002FTensorBase.h). Tape-based [Automatic differentiation in Flashlight](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fautograd.html) is simple and works as you'd expect.\n\n\u003Cdetails>\u003Csummary>Autograd Example\u003C\u002Fsummary>\n\n```c++\nauto A = Variable(fl::rand({1000, 1000}), true \u002F* calcGrad *\u002F);\nauto B = 2.0 * A;\nauto C = 1.0 + B;\nauto D = log(C);\nD.backward(); \u002F\u002F populates A.grad() along with gradients for B, C, and D.\n```\n\n\u003C\u002Fdetails>\n\n## Building and Installing\n[**Install with `vcpkg`**](#library-installation-with-vcpkg) | [**With Docker**](#building-and-running-flashlight-with-docker) | [**From Source**](#building-from-source) | [**From Source with `vcpkg`**](#from-source-build-with-vcpkg) | [**Build Your Project with Flashlight**](#building-your-own-project-with-flashlight)\n\n### Requirements\nAt minimum, compilation requires:\n- A C++ compiler with good C++17 support (e.g. gcc\u002Fg++ >= 7)\n- [CMake](https:\u002F\u002Fcmake.org\u002F) — version 3.10 or later, and ``make``\n- A Linux-based operating system.\n\nSee the [full dependency](#dependencies) list for more details if [building from source](#building-from-source).\n\nInstructions for building\u002Finstalling Python bindings [can be found here](bindings\u002Fpython\u002FREADME.md).\n\n### Flashlight Build Setups\n\nFlashlight can be broken down into several components as [described above](#project-layout). Each component can be incrementally built by specifying the correct [build options](#build-options).\n\nThere are two ways to work with Flashlight:\n1. **As an installed library** that you link to with your own project. This is best for building standalone applications dependent on Flashlight.\n2. **With in-source development** where the Flashlight project source is changed and rebuilt. This is best if customizing\u002Fhacking the core framework or the Flashlight-provided [app binaries](flashlight\u002Fapp).\n\nFlashlight can be built in one of two ways:\n1. [**With `vcpkg`**](#installing-flashlight-with-vcpkg), a [C++ package manager](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg).\n2. [**From source**](#building-from-source) by installing dependencies as needed.\n\n### Installing Flashlight with `vcpkg`\n#### Library Installation with `vcpkg`\n\nFlashlight is most-easily built and installed with `vcpkg`. Both the CUDA and CPU backends are supported with `vcpkg`. For either backend, first install [Intel MKL](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html). For the CUDA backend, install [`CUDA` >= 9.2](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads), [`cuDNN`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fcudnn\u002Finstall-guide\u002Findex.html), and [`NCCL`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fnccl\u002Finstall-guide\u002Findex.html). Then, after [installing `vcpkg`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg#getting-started), install the libraries and core with:\n```shell\n.\u002Fvcpkg\u002Fvcpkg install flashlight-cuda # CUDA backend, OR\n.\u002Fvcpkg\u002Fvcpkg install flashlight-cpu  # CPU backend\n```\nTo install [Flashlight apps](flashlight\u002Fapp), check the features available for installation by running `.\u002Fvcpkg search flashlight-cuda` or `.\u002Fvcpkg search flashlight-cpu`. Each app is a \"feature\": for example, `.\u002Fvcpkg install flashlight-cuda[asr]` installs the ASR app with the CUDA backend.\n\nBelow is the currently-supported list of features (for each of [`flashlight-cuda`](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cuda) and [`flashlight-cpu`](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cpu)):\n```\nflashlight-{cuda\u002Fcpu}[lib]      # Flashlight libraries\nflashlight-{cuda\u002Fcpu}[nn]       # Flashlight neural net library\nflashlight-{cuda\u002Fcpu}[asr]      # Flashlight speech recognition app\nflashlight-{cuda\u002Fcpu}[lm]       # Flashlight language modeling app\nflashlight-{cuda\u002Fcpu}[imgclass] # Flashlight image classification app\n```\n\nFlashlight [app binaries](flashlight\u002Fapp) are also built for the selected features and are installed into the `vcpkg` install tree's `tools` directory.\n\n[Integrating Flashlight into your own project](#with-a-vcpkg-flashlight-installation) with is simple using `vcpkg`'s [CMake toolchain integration](https:\u002F\u002Fvcpkg.readthedocs.io\u002Fen\u002Flatest\u002Fexamples\u002Finstalling-and-using-packages\u002F#cmake).\n\n#### From-Source Build with `vcpkg`\n\nFirst, install the dependencies for your backend of choice using `vcpkg` (click to expand the below):\n\n\u003Cdetails>\u003Csummary>Installing CUDA Backend Dependencies with vcpkg\u003C\u002Fsummary>\n\nTo build the Flashlight CUDA backend from source using dependencies installed with `vcpkg`, install [`CUDA` >= 9.2](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads), [`cuDNN`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fcudnn\u002Finstall-guide\u002Findex.html), [`NCCL`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fnccl\u002Finstall-guide\u002Findex.html), and [Intel MKL](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html), then build the rest of the dependencies for the CUDA backend based on which Flashlight features you'd like to build:\n```shell\n.\u002Fvcpkg install \\\n    cuda intel-mkl fftw3 cub kenlm                \\ # if building flashlight libraries\n    arrayfire[cuda] cudnn nccl openmpi cereal stb \\ # if building the flashlight neural net library\n    gflags glog                                   \\ # if building any flashlight apps\n    libsndfile                                    \\ # if building the flashlight asr app\n    gtest                                           # optional, if building tests\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>Installing CPU Backend Dependencies with vcpkg\u003C\u002Fsummary>\n\nTo build the Flashlight CPU backend from source using dependencies installed with `vcpkg`, install [Intel MKL](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html), then build the rest of the dependencies for the CPU backend based on which Flashlight features you'd like to build:\n```shell\n.\u002Fvcpkg install \\\n    intel-mkl fftw3 kenlm                              \\ # for flashlight libraries\n    arrayfire[cpu] gloo[mpi] openmpi onednn cereal stb \\ # for the flashlight neural net library\n    gflags glog                                        \\ # for the flashlight runtime pkg (any flashlight apps using it)\n    libsndfile                                         \\ # for the flashlight speech pkg\n    gtest                                                # optional, for tests\n```\n\n\u003C\u002Fdetails>\n\n##### Build Using the `vcpkg` Toolchain File\nTo build Flashlight from source with these dependencies, clone the repository:\n```shell\ngit clone https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight.git && cd flashlight\nmkdir -p build && cd build\n```\nThen, build from source using `vcpkg`'s [CMake toolchain](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg\u002Fblob\u002Fmaster\u002Fdocs\u002Fusers\u002Fintegration.md#cmake-toolchain-file-recommended-for-open-source-cmake-projects):\n```shell\ncmake .. \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DFL_BUILD_ARRAYFIRE=ON \\\n    -DCMAKE_TOOLCHAIN_FILE=[path to your vcpkg clone]\u002Fscripts\u002Fbuildsystems\u002Fvcpkg.cmake\nmake -j$(nproc)\nmake install -j$(nproc) # only if you want to install Flashlight for external use\n```\nTo build a subset of Flashlight's features, see the [build options](#build-options) below.\n\n### Building from Source\nTo build from source, first install the below [dependencies](#dependencies). Most are available with your system's local package manager.\n\nSome dependencies marked below are downloaded and installed automatically if not found on the local system. `FL_BUILD_STANDALONE` determines this behavior — if disabled, dependencies won't be downloaded and built when building Flashlight.\n\n**Once all dependencies are installed**, clone the repository:\n```shell\ngit clone https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight.git && cd flashlight\nmkdir -p build && cd build\n```\nThen build all Flashlight components with:\n```\ncmake .. -DCMAKE_BUILD_TYPE=Release -DFL_BUILD_ARRAYFIRE=ON [...build options]\nmake -j$(nproc)\nmake install\n```\nSetting the `MKLROOT` environment variable (`export MKLROOT=\u002Fopt\u002Fintel\u002Foneapi\u002Fmkl\u002Flatest` or `export MKLROOT=\u002Fopt\u002Fintel\u002Fmkl` on most Linux-based systems) can help CMake find Intel MKL if not initially found.\n\nTo build a smaller subset of Flashlight features\u002Fapps, see the [build options](#build-options) below for a complete list of options.\n\nTo install Flashlight in a custom directory, use CMake's [`CMAKE_INSTALL_PREFIX`](https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_INSTALL_PREFIX.html) argument. Flashlight libraries can be built as shared libraries using CMake's [`BUILD_SHARED_LIBS`](https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FBUILD_SHARED_LIBS.html) argument.\n\nFlashlight uses modern CMake and `IMPORTED` targets for most dependencies. If a dependency isn't found, passing `-D\u003Cpackage>_DIR` to your `cmake` command or exporting `\u003Cpackage>_DIR` as an environment variable equal to the path to `\u003Cpackage>Config.cmake` can help locate dependencies on your system. See [the documentation](https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fcommand\u002Ffind_package.html) for more details. If CMake is failing to locate a package, check to see if a corresponding [issue](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Fissues) has already been created before creating your own.\n\n#### Minimal setup on macOS\n\nOn MacOS, ArrayFire can be installed with homebrew and the Flashlight core can be built as follows:\n\n```\nbrew install arrayfire\ncmake .. \\\n      -DFL_ARRAYFIRE_USE_OPENCL=ON \\\n      -DFL_USE_ONEDNN=OFF \\\n      -DFL_BUILD_TESTS=OFF \\\n      -DFL_BUILD_EXAMPLES=OFF \\\n      -DFL_BUILD_SCRIPTS=OFF \\\n      -DFL_BUILD_DISTRIBUTED=OFF\nmake -j$(nproc)\n```\n\n#### Dependencies\n\nDependencies marked with `*` are automatically downloaded and built from source if not found on the system. Setting `FL_BUILD_STANDALONE` to `OFF` disables this behavior.\n\nDependencies marked with `^` are required if building with distributed training enabled (`FL_BUILD_DISTRIBUTED` — see the [build options](#build-options) below). Distributed training is required for all apps.\n\nDependencies marked with `†` are installable via `vcpkg`. See the [instructions for installing those dependencies](#from-source-build-with-vcpkg) above for doing a Flashlight from-source build.\n\n\u003Ctable>\n\u003Cthead>\n  \u003Ctr>\n    \u003Cth>Component\u003C\u002Fth>\n    \u003Cth>Backend\u003C\u002Fth>\n    \u003Cth>Dependencies\u003C\u002Fth>\n  \u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">libraries\u003C\u002Ftd>\n    \u003Ctd>CUDA\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads\">CUDA\u003C\u002Fa> &gt;= 9.2, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnvidia\u002Fcub\">CUB\u003C\u002Fa>*† (if CUDA &lt; 11)\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CPU\u003C\u002Ftd>\n    \u003Ctd>A BLAS library (\u003Ca href=\"https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html\">Intel MKL\u003C\u002Fa> &gt;= 2018, OpenBLAS†, etc)\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"3\">core\u003C\u002Ftd>\n    \u003Ctd>Any\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire#installation\">ArrayFire\u003C\u002Fa> &gt;= 3.7.3†, an MPI library^(\u003Ca href=\"https:\u002F\u002Fwww.open-mpi.org\u002F\">OpenMPI\u003C\u002Fa>†, etc),&nbsp;&nbsp;\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FUSCiLab\u002Fcereal\">cereal\u003C\u002Fa>*† &gt;= 1.3.0, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnothings\u002Fstb\">stb\u003C\u002Fa>*†\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CUDA\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads\">CUDA\u003C\u002Fa> &gt;= 9.2, \u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002Fnccl\">NCCL\u003C\u002Fa>^, \u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002FcuDNN\">cuDNN\u003C\u002Fa>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CPU\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Foneapi-src\u002FoneDNN\">oneDNN\u003C\u002Fa>† &gt;= 2.5.2, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffacebookincubator\u002Fgloo\">gloo\u003C\u002Fa> (\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffacebookincubator\u002Fgloo\u002Fblob\u002F01e2c2660cd43963ce1fe3e21220ac01f07d9a4b\u002Fdocs\u002Frendezvous.md#using-mpi\">with MPI\u003C\u002Fa>)*^†\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>app: all \u003C\u002Ftd>\n    \u003Ctd>Any\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fglog\">Google Glog\u003C\u002Fa>†, \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgflags\u002Fgflags\">Gflags\u003C\u002Fa>†\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>app: asr\u003C\u002Ftd>\n    \u003Ctd>Any\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flibsndfile\u002Flibsndfile\">libsndfile\u003C\u002Fa>*† &gt;= 10.0.28, a BLAS library (\u003Ca href=\"https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html\">Intel MKL\u003C\u002Fa> &gt;= 2018, OpenBLAS†, etc), \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fflashlight\u002Ftext\">flashlight\u002Ftext\u003C\u002Fa>*\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>app: imgclass\u003C\u002Ftd>\n    \u003Ctd>Any\u003C\u002Ftd>\n    \u003Ctd>-\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>app: imgclass\u003C\u002Ftd>\n    \u003Ctd>Any\u003C\u002Ftd>\n    \u003Ctd>-\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>app: lm\u003C\u002Ftd>\n    \u003Ctd>Any\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fflashlight\u002Ftext\">flashlight\u002Ftext\u003C\u002Fa>*\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>tests\u003C\u002Ftd>\n    \u003Ctd>Any\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgoogletest\">Google Test (gtest, with gmock)\u003C\u002Fa>*† &gt;= 1.10.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n#### Build Options\nThe Flashlight CMake build accepts the following build options (prefixed with `-D` when running CMake from the command line):\n\n\u003Ctable>\n\u003Cthead>\n  \u003Ctr>\n    \u003Cth>Name\u003C\u002Fth>\n    \u003Cth>Options\u003C\u002Fth>\n    \u003Cth>Default Value\u003C\u002Fth>\n    \u003Cth>Description\u003C\u002Fth>\n  \u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">FL_BUILD_ARRAYFIRE\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build Flashlight with the ArrayFire backend.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Downloads\u002Fbuilds some dependencies if not found.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"3\">FL_BUILD_LIBRARIES\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build the Flashlight libraries.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build the Flashlight neural net library.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build with distributed training; required for apps.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_CONTRIB\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build contrib APIs subject to breaking changes.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APPS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build applications (see below).\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_ASR\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build the automatic speech recognition application.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_IMGCLASS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build the image classification application.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_LM\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build the language modeling application.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_ASR_TOOLS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build automatic speech recognition app tools.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_TESTS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build tests.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_EXAMPLES\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>Build examples.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_EXPERIMENTAL\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>OFF\u003C\u002Ftd>\n    \u003Ctd>Build experimental components.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CMAKE_BUILD_TYPE\u003C\u002Ftd>\n    \u003Ctd>See \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_BUILD_TYPE.html\">docs\u003C\u002Fa>.\u003C\u002Ftd>\n    \u003Ctd>Debug\u003C\u002Ftd>\n    \u003Ctd>See the \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_BUILD_TYPE.html\">CMake documentation\u003C\u002Fa>.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CMAKE_INSTALL_PREFIX\u003C\u002Ftd>\n    \u003Ctd>[Directory]\u003C\u002Ftd>\n    \u003Ctd>See \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_INSTALL_PREFIX.html\">docs\u003C\u002Fa>.\u003C\u002Ftd>\n    \u003Ctd>See the \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_INSTALL_PREFIX.html\">CMake documentation\u003C\u002Fa>.\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n### Building Your Own Project with Flashlight\nFlashlight is most-easily linked to using CMake. Flashlight exports the following CMake targets when installed:\n- `flashlight::flashlight` — contains flashlight libraries as well as the flashlight core autograd and neural network library.\n- `flashlight::fl_pkg_runtime` — contains flashlight core as well as common utilities for training (logging \u002F flags \u002F distributed utils).\n- `flashlight::fl_pkg_vision` — contains flashlight core as well as common utilities for vision pipelines.\n- `flashlight::fl_pkg_text` — contains flashlight core as well as common utilities for dealing with text data.\n- `flashlight::fl_pkg_speech` — contains flashlight core as well as common utilities for dealing with speech data.\n- `flashlight::fl_pkg_halide` — contains flashlight core and extentions to easily interface with halide.\n\nGiven a simple `project.cpp` file that includes and links to Flashlight:\n```c++\n#include \u003Ciostream>\n\n#include \u003Cflashlight\u002Ffl\u002Fflashlight.h>\n\nint main() {\n  fl::init();\n  fl::Variable v(fl::full({1}, 1.), true);\n  auto result = v + 10;\n  std::cout \u003C\u003C \"Tensor value is \" \u003C\u003C result.tensor() \u003C\u003C std::endl; \u002F\u002F 11.000\n  return 0;\n}\n```\n\nThe following CMake configuration links Flashlight and sets include directories:\n\n```cmake\ncmake_minimum_required(VERSION 3.10)\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nadd_executable(myProject project.cpp)\n\nfind_package(flashlight CONFIG REQUIRED)\ntarget_link_libraries(myProject PRIVATE flashlight::flashlight)\n```\n\n#### With a `vcpkg` Flashlight Installation\n\nIf you installed Flashlight with `vcpkg`, the above CMake configuration for `myProject` can be built by running:\n```shell\ncd project && mkdir build && cd build\ncmake .. \\\n  -DCMAKE_TOOLCHAIN_FILE=[path to vcpkg clone]\u002Fscripts\u002Fbuildsystems\u002Fvcpkg.cmake \\\n  -DCMAKE_BUILD_TYPE=Release\nmake -j$(nproc)\n```\n\n#### With a From-Source Flashlight Installation\n\nIf using a from-source installation of Flashlight, Flashlight will be found automatically by CMake:\n```shell\ncd project && mkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j$(nproc)\n```\nIf Flashlight is installed in a custom location using a `CMAKE_INSTALL_PREFIX`, passing `-Dflashlight_DIR=[install prefix]\u002Fshare\u002Fflashlight\u002Fcmake` as an argument to your `cmake` command can help CMake find Flashlight.\n\n### Building and Running Flashlight with Docker\nFlashlight and its dependencies can also be built with the provided Dockerfiles; see the accompanying [Docker documentation](.docker) for more information.\n\n### Contributing and Contact\nContact: vineelkpratap@fb.com, awni@fb.com, jacobkahn@fb.com, qiantong@fb.com, antares@fb.com, padentomasello@fb.com,\njcai@fb.com,  gab@fb.com, vitaliy888@fb.com, locronan@fb.com\n\nFlashlight is being very actively developed. See\n[CONTRIBUTING](CONTRIBUTING.md) for more on how to help out.\n\n#### Acknowledgments\nSome of Flashlight's code is derived from\n[arrayfire-ml](https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire-ml\u002F).\n\n## Citing\nYou can cite [Flashlight](https:\u002F\u002Farxiv.org\u002Fabs\u002F2201.12465) using:\n```\n@misc{kahn2022flashlight,\n      title={Flashlight: Enabling Innovation in Tools for Machine Learning},\n      author={Jacob Kahn and Vineel Pratap and Tatiana Likhomanenko and Qiantong Xu and Awni Hannun and Jeff Cai and Paden Tomasello and Ann Lee and Edouard Grave and Gilad Avidov and Benoit Steiner and Vitaliy Liptchinsky and Gabriel Synnaeve and Ronan Collobert},\n      year={2022},\n      eprint={2201.12465},\n      archivePrefix={arXiv},\n      primaryClass={cs.LG}\n}\n```\n\n## License\nFlashlight is under an MIT license. See [LICENSE](LICENSE) for more information.\n","[![CircleCI](https:\u002F\u002Fcircleci.com\u002Fgh\u002Fflashlight\u002Fflashlight.svg?style=shield)](https:\u002F\u002Fapp.circleci.com\u002Fpipelines\u002Fgithub\u002Fflashlight\u002Fflashlight)\n[![Documentation Status](https:\u002F\u002Fimg.shields.io\u002Freadthedocs\u002Ffl.svg)](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002F)\n[![Docker Image Build Status](https:\u002F\u002Fimg.shields.io\u002Fgithub\u002Fworkflow\u002Fstatus\u002Fflashlight\u002Fflashlight\u002FPublish%20Docker%20images?label=docker%20image%20build)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fflml\u002Fflashlight\u002Ftags)\n[![Join the chat at https:\u002F\u002Fgitter.im\u002Fflashlight-ml\u002Fcommunity](https:\u002F\u002Fimg.shields.io\u002Fgitter\u002Froom\u002Fflashlight-ml\u002Fcommunity)](https:\u002F\u002Fgitter.im\u002Fflashlight-ml\u002Fcommunity?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)\n\n[![codecov](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fflashlight\u002Fflashlight\u002Fbranch\u002Fmaster\u002Fgraph\u002Fbadge.svg?token=rBp4AilMc0)](https:\u002F\u002Fcodecov.io\u002Fgh\u002Fflashlight\u002Fflashlight)\n\n[![Docker Image for CUDA backend](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fflml\u002Fflashlight\u002Fcuda-latest?label=docker%20%28cuda%29&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fflml\u002Fflashlight\u002Ftags?page=1&ordering=last_updated&name=cuda-latest)\n[![Docker Image for CPU backend](https:\u002F\u002Fimg.shields.io\u002Fdocker\u002Fimage-size\u002Fflml\u002Fflashlight\u002Fcpu-latest?label=docker%20%28cpu%29&logo=docker)](https:\u002F\u002Fhub.docker.com\u002Fr\u002Fflml\u002Fflashlight\u002Ftags?page=1&ordering=last_updated&name=cpu-latest)\n\n[![Install CUDA backend with vcpkg](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?color=orange&label=get%20%28cuda%29&query=name&url=https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2Fvcpkg%2Fmaster%2Fports%2Fflashlight-cuda%2Fvcpkg.json&prefix=vcpkg%20install%20)](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cuda)\n[![Install CPU backend with vcpkg](https:\u002F\u002Fimg.shields.io\u002Fbadge\u002Fdynamic\u002Fjson?color=orange&label=get%20%28cpu%29&query=name&url=https%3A%2F%2Fraw.githubusercontent.com%2Fmicrosoft%2Fvcpkg%2Fmaster%2Fports%2Fflashlight-cpu%2Fvcpkg.json&prefix=vcpkg%20install%20)](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cpu)\n\n\nFlashlight 是一个由 Facebook AI Research 以及 Torch、TensorFlow、Eigen 和 Deep Speech 的创建者共同开发的快速、灵活的机器学习库，完全用 C++ 编写。其核心特性包括：\n- **完全可定制性**，包括用于张量计算的 [内部 API](flashlight\u002Ffl\u002Ftensor\u002FREADME.md)。\n- **轻量级**，核心代码小于 10 MB，仅有约 2 万行 C++ 代码。\n- **高性能默认设置**，通过 [*ArrayFire*](https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire) 张量库以现代 C++ 实现即时编译内核。\n- 强调效率与规模。\n\nFlashlight 原生支持 C++，且易于扩展，使其成为一个强大的研究框架，能够在不牺牲性能的前提下，以较少的约束快速迭代新的实验方案和算法。在同一个仓库中，Flashlight 提供了适用于多个领域的研究应用：\n- [自动语音识别](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Ftree\u002Fmaster\u002Fflashlight\u002Fapp\u002Fasr)（前身为 [wav2letter](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fwav2letter\u002F) 项目）— [文档](flashlight\u002Fapp\u002Fasr) | [教程](flashlight\u002Fapp\u002Fasr\u002Ftutorial)\n- [图像分类](flashlight\u002Fapp\u002Fimgclass)\n- [目标检测](flashlight\u002Fapp\u002Fobjdet)\n- [语言建模](flashlight\u002Fapp\u002Flm)\n\n### 项目结构\n\nFlashlight 分为几个部分：\n- [**`flashlight\u002Flib`**](flashlight\u002Flib) 包含用于音频处理等任务的内核和独立工具。\n- [**`flashlight\u002Ffl`**](flashlight\u002Ffl) 是核心张量接口及神经网络库，默认使用 [ArrayFire](https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire) 张量库。\n- [**`flashlight\u002Fpkg`**](flashlight\u002Fpkg) 是基于核心构建的语音、视觉和文本领域专用包。\n- [**`flashlight\u002Fapp`**](flashlight\u002Fapp) 是将核心库应用于不同领域机器学习的具体应用。\n\n## 快速入门\n\n首先，[构建并安装 Flashlight](#building-and-installing) 并将其 [链接到您自己的项目](#building-your-own-project-with-flashlight)。\n\n[`Sequential`](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fmodules.html#sequential) 可以将 Flashlight 的 [`Module`](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fmodules.html#module) 组成序列，用于串联计算。\n\n\u003Cdetails>\u003Csummary>实现一个简单的卷积神经网络非常容易。\u003C\u002Fsummary>\n\n```c++\n#include \u003Cflashlight\u002Ffl\u002Fflashlight.h>\n\nSequential model;\n\nmodel.add(View(fl::Shape({IM_DIM, IM_DIM, 1, -1})));\nmodel.add(Conv2D(\n    1 \u002F* 输入通道 *\u002F,\n    32 \u002F* 输出通道 *\u002F,\n    5 \u002F* 卷积核宽度 *\u002F,\n    5 \u002F* 卷积核高度 *\u002F,\n    1 \u002F* 步幅 x *\u002F,\n    1 \u002F* 步幅 y *\u002F,\n    PaddingMode::SAME; \u002F* 填充模式 *\u002F,\n    PaddingMode::SAME; \u002F* 填充模式 *\u002F));\nmodel.add(ReLU());\nmodel.add(Pool2D(\n    2 \u002F* 卷积核宽度 *\u002F,\n    2 \u002F* 卷积核高度 *\u002F,\n    2 \u002F* 步幅 x *\u002F,\n    2 \u002F* 步幅 y *\u002F));\nmodel.add(Conv2D(32, 64, 5, 5, 1, 1, PaddingMode::SAME, PaddingMode::SAME));\nmodel.add(ReLU());\nmodel.add(Pool2D(2, 2, 2, 2));\nmodel.add(View(fl::Shape({7 * 7 * 64, -1})));\nmodel.add(Linear(7 * 7 * 64, 1024));\nmodel.add(ReLU());\nmodel.add(Dropout(0.5));\nmodel.add(Linear(1024, 10));\nmodel.add(LogSoftmax());\n```\n\n前向和反向传播计算非常简单：\n```c++\nauto output = model.forward(input);\nauto loss = categoricalCrossEntropy(output, target);\nloss.backward();\n```\n\n\u003C\u002Fdetails>\n\n有关完整的训练循环和数据集抽象，请参阅 [MNIST 示例](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fmnist.html)。\n\n[`Variable`](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fvariable.html) 是一种基于磁带的抽象，封装了 [Flashlight 张量](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Fblob\u002Fmain\u002Fflashlight\u002Ffl\u002Ftensor\u002FTensorBase.h)。Flashlight 中基于磁带的 [自动微分](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002Fautograd.html) 简单易用，符合预期。\n\n\u003Cdetails>\u003Csummary>自动微分示例\u003C\u002Fsummary>\n\n```c++\nauto A = Variable(fl::rand({1000, 1000}), true \u002F* calcGrad *\u002F);\nauto B = 2.0 * A;\nauto C = 1.0 + B;\nauto D = log(C);\nD.backward(); \u002F\u002F 会填充 A.grad()，同时计算 B、C 和 D 的梯度。\n```\n\n\u003C\u002Fdetails>\n\n## 构建与安装\n[**使用 `vcpkg` 安装**](#library-installation-with-vcpkg) | [**使用 Docker**](#building-and-running-flashlight-with-docker) | [**从源码构建**](#building-from-source) | [**结合 `vcpkg` 从源码构建**](#from-source-build-with-vcpkg) | [**在您的项目中使用 Flashlight**](#building-your-own-project-with-flashlight)\n\n### 需求\n至少需要以下条件才能进行编译：\n- 支持良好 C++17 的 C++ 编译器（例如 gcc\u002Fg++ >= 7）\n- [CMake](https:\u002F\u002Fcmake.org\u002F) — 版本 3.10 或更高，以及 ``make``\n- 基于 Linux 的操作系统。\n\n如果选择 [从源码构建](#building-from-source)，请参阅 [完整依赖列表](#dependencies)以获取更多详细信息。\n\n关于构建\u002F安装 Python 绑定的说明 [可以在这里找到](bindings\u002Fpython\u002FREADME.md)。\n\n### 手电筒构建设置\n\n如上文所述，手电筒可以分解为多个组件。每个组件都可以通过指定正确的[构建选项](#build-options)逐步构建。\n\n使用手电筒有两种方式：\n1. **作为已安装的库**，与您自己的项目链接。这对于构建依赖于手电筒的独立应用程序最为合适。\n2. **源码内开发**，即修改并重新构建手电筒项目源码。如果您需要自定义或深入修改核心框架，或者使用手电筒提供的[应用二进制文件](flashlight\u002Fapp)，则这种方式最为合适。\n\n手电筒可以通过以下两种方式构建：\n1. [**使用 `vcpkg`**](#installing-flashlight-with-vcpkg)，一个[C++ 包管理器](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg)。\n2. [**从源码构建**](#building-from-source)，根据需要安装依赖项。\n\n### 使用 `vcpkg` 安装手电筒\n#### 使用 `vcpkg` 安装库\n\n使用 `vcpkg` 是构建和安装手电筒最简单的方式。`vcpkg` 同时支持 CUDA 和 CPU 后端。无论选择哪种后端，首先都需要安装 [Intel MKL](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html)。对于 CUDA 后端，还需安装 [`CUDA` ≥ 9.2](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads)、[`cuDNN`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fcudnn\u002Finstall-guide\u002Findex.html) 和 [`NCCL`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fnccl\u002Finstall-guide\u002Findex.html)。然后，在[安装 `vcpkg`](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg#getting-started)之后，即可通过以下命令安装库和核心：\n```shell\n.\u002Fvcpkg\u002Fvcpkg install flashlight-cuda # CUDA 后端，或\n.\u002Fvcpkg\u002Fvcpkg install flashlight-cpu  # CPU 后端\n```\n\n要安装[手电筒应用](flashlight\u002Fapp)，可以运行 `.\u002Fvcpkg search flashlight-cuda` 或 `.\u002Fvcpkg search flashlight-cpu` 查看可安装的功能。每个应用都对应一个“功能”：例如，`.\u002Fvcpkg install flashlight-cuda[asr]` 将安装带有 CUDA 后端的 ASR 应用程序。\n\n以下是当前支持的功能列表（适用于 [`flashlight-cuda`](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cuda) 和 [`flashlight-cpu`](https:\u002F\u002Fvcpkg.info\u002Fport\u002Fflashlight-cpu)）：\n```\nflashlight-{cuda\u002Fcpu}[lib]      # 手电筒库\nflashlight-{cuda\u002Fcpu}[nn]       # 手电筒神经网络库\nflashlight-{cuda\u002Fcpu}[asr]      # 手电筒语音识别应用\nflashlight-{cuda\u002Fcpu}[lm]       # 手电筒语言建模应用\nflashlight-{cuda\u002Fcpu}[imgclass] # 手电筒图像分类应用\n```\n\n手电筒的[应用二进制文件](flashlight\u002Fapp)也会针对所选功能进行构建，并安装到 `vcpkg` 安装目录的 `tools` 目录中。\n\n使用 `vcpkg` 的[CMake 工具链集成](https:\u002F\u002Fvcpkg.readthedocs.io\u002Fen\u002Flatest\u002Fexamples\u002Finstalling-and-using-packages\u002F#cmake)，将手电筒集成到您自己的项目中非常简单（详见下文[使用 vcpkg 安装的手电筒](#with-a-vcpkg-flashlight-installation)）。\n\n#### 使用 `vcpkg` 从源码构建\n\n首先，使用 `vcpkg` 安装您所选后端的依赖项（点击展开下方内容）：\n\n\u003Cdetails>\u003Csummary>使用 vcpkg 安装 CUDA 后端依赖项\u003C\u002Fsummary>\n\n要使用 `vcpkg` 安装的依赖项从源码构建手电筒 CUDA 后端，需先安装 [`CUDA` ≥ 9.2](https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads)、[`cuDNN`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fcudnn\u002Finstall-guide\u002Findex.html)、[`NCCL`](https:\u002F\u002Fdocs.nvidia.com\u002Fdeeplearning\u002Fnccl\u002Finstall-guide\u002Findex.html) 和 [Intel MKL](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html)，然后根据您希望构建的手电筒功能，继续安装 CUDA 后端的其他依赖项：\n```shell\n.\u002Fvcpkg install \\\n    cuda intel-mkl fftw3 cub kenlm                \\ # 如果构建手电筒库\n    arrayfire[cuda] cudnn nccl openmpi cereal stb \\ # 如果构建手电筒神经网络库\n    gflags glog                                   \\ # 如果构建任何手电筒应用\n    libsndfile                                    \\ # 如果构建手电筒 ASR 应用\n    gtest                                           # 可选，如果构建测试\n```\n\u003C\u002Fdetails>\n\n\u003Cdetails>\u003Csummary>使用 vcpkg 安装 CPU 后端依赖项\u003C\u002Fsummary>\n\n要使用 `vcpkg` 安装的依赖项从源码构建手电筒 CPU 后端，需先安装 [Intel MKL](https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html)，然后根据您希望构建的手电筒功能，继续安装 CPU 后端的其他依赖项：\n```shell\n.\u002Fvcpkg install \\\n    intel-mkl fftw3 kenlm                              \\ # 用于手电筒库\n    arrayfire[cpu] gloo[mpi] openmpi onednn cereal stb \\ # 用于手电筒神经网络库\n    gflags glog                                        \\ # 用于手电筒运行时包（任何使用它的手电筒应用）\n    libsndfile                                         \\ # 用于手电筒语音包\n    gtest                                                # 可选，用于测试\n```\n\n\u003C\u002Fdetails>\n\n##### 使用 `vcpkg` 工具链文件构建\n\n要使用这些依赖项从源码构建手电筒，首先克隆仓库：\n```shell\ngit clone https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight.git && cd flashlight\nmkdir -p build && cd build\n```\n\n然后，使用 `vcpkg` 的[CMake 工具链](https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg\u002Fblob\u002Fmaster\u002Fdocs\u002Fusers\u002Fintegration.md#cmake-toolchain-file-recommended-for-open-source-cmake-projects)从源码构建：\n```shell\ncmake .. \\\n    -DCMAKE_BUILD_TYPE=Release \\\n    -DFL_BUILD_ARRAYFIRE=ON \\\n    -DCMAKE_TOOLCHAIN_FILE=[您的 vcpkg 克隆路径]\u002Fscripts\u002Fbuildsystems\u002Fvcpkg.cmake\nmake -j$(nproc)\nmake install -j$(nproc) # 仅当您希望将手电筒安装以供外部使用时\n```\n\n要构建手电筒的部分功能，可参阅下方的[构建选项](#build-options)。\n\n### 从源码构建\n要从源码构建，首先需要安装以下[依赖项](#dependencies)。大多数依赖项可通过您系统的本地包管理器获取。\n\n部分标记为自动下载和安装的依赖项，若本地系统未找到，则会自动下载并安装。`FL_BUILD_STANDALONE` 控制此行为——如果禁用，构建手电筒时将不会下载和构建这些依赖项。\n\n**在所有依赖项安装完毕后**，克隆仓库：\n```shell\ngit clone https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight.git && cd flashlight\nmkdir -p build && cd build\n```\n\n然后，使用以下命令构建手电筒的所有组件：\n```shell\ncmake .. -DCMAKE_BUILD_TYPE=Release -DFL_BUILD_ARRAYFIRE=ON [...构建选项]\nmake -j$(nproc)\nmake install\n```\n\n设置 `MKLROOT` 环境变量（在大多数基于 Linux 的系统上，可设置为 `export MKLROOT=\u002Fopt\u002Fintel\u002Foneapi\u002Fmkl\u002Flatest` 或 `export MKLROOT=\u002Fopt\u002Fintel\u002Fmkl`），有助于 CMake 在未自动找到 Intel MKL 时定位该库。\n\n要构建手电筒更小范围的功能或应用，请参阅下方的[构建选项](#build-options)，以获取完整的选项列表。\n\n要在自定义目录中安装 Flashlight，请使用 CMake 的 [`CMAKE_INSTALL_PREFIX`](https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_INSTALL_PREFIX.html) 参数。Flashlight 库可以使用 CMake 的 [`BUILD_SHARED_LIBS`](https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FBUILD_SHARED_LIBS.html) 参数构建为共享库。\n\nFlashlight 对大多数依赖项使用现代 CMake 和 `IMPORTED` 目标。如果未找到某个依赖项，可以在 `cmake` 命令中传递 `-D\u003Cpackage>_DIR` 参数，或将 `\u003Cpackage>_DIR` 导出为环境变量，并将其值设置为 `\u003Cpackage>Config.cmake` 文件的路径，这样可以帮助在您的系统上定位依赖项。有关更多详细信息，请参阅 [文档](https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fcommand\u002Ffind_package.html)。如果 CMake 无法找到某个包，请先检查是否已存在相应的 [问题](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Fissues)，再自行创建新问题。\n\n#### macOS 上的最小化设置\n\n在 macOS 上，可以使用 Homebrew 安装 ArrayFire，并按以下方式构建 Flashlight 核心：\n\n```\nbrew install arrayfire\ncmake .. \\\n      -DFL_ARRAYFIRE_USE_OPENCL=ON \\\n      -DFL_USE_ONEDNN=OFF \\\n      -DFL_BUILD_TESTS=OFF \\\n      -DFL_BUILD_EXAMPLES=OFF \\\n      -DFL_BUILD_SCRIPTS=OFF \\\n      -DFL_BUILD_DISTRIBUTED=OFF\nmake -j$(nproc)\n```\n\n#### 依赖项\n\n标有 `*` 的依赖项会在系统中未找到时自动从源代码下载并构建。将 `FL_BUILD_STANDALONE` 设置为 `OFF` 可禁用此行为。\n\n标有 `^` 的依赖项是在启用分布式训练（`FL_BUILD_DISTRIBUTED` — 请参阅下方的 [构建选项]）时必需的。所有应用程序都需要分布式训练功能。\n\n标有 `†` 的依赖项可以通过 `vcpkg` 安装。有关执行 Flashlight 源码构建时如何安装这些依赖项的说明，请参阅上方的 [通过 vcpkg 进行源码构建] 部分。\n\n\u003Ctable>\n\u003Cthead>\n  \u003Ctr>\n    \u003Cth>组件\u003C\u002Fth>\n    \u003Cth>后端\u003C\u002Fth>\n    \u003Cth>依赖项\u003C\u002Fth>\n  \u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">库\u003C\u002Ftd>\n    \u003Ctd>CUDA\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads\">CUDA\u003C\u002Fa> ≥ 9.2，\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnvidia\u002Fcub\">CUB\u003C\u002Fa>*†（若 CUDA \u003C 11）\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CPU\u003C\u002Ftd>\n    \u003Ctd>一个 BLAS 库（\u003Ca href=\"https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html\">Intel MKL\u003C\u002Fa> ≥ 2018，OpenBLAS† 等）\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"3\">核心\u003C\u002Ftd>\n    \u003Ctd>任意\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire#installation\">ArrayFire\u003C\u002Fa> ≥ 3.7.3†，一个 MPI 库^（\u003Ca href=\"https:\u002F\u002Fwww.open-mpi.org\u002F\">OpenMPI\u003C\u002Fa>† 等），\u003Ca href=\"https:\u002F\u002Fgithub.com\u002FUSCiLab\u002Fcereal\">cereal\u003C\u002Fa>*† ≥ 1.3.0，\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fnothings\u002Fstb\">stb\u003C\u002Fa>*†\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CUDA\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002Fcuda-downloads\">CUDA\u003C\u002Fa> ≥ 9.2，\u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002Fnccl\">NCCL\u003C\u002Fa>^，\u003Ca href=\"https:\u002F\u002Fdeveloper.nvidia.com\u002FcuDNN\">cuDNN\u003C\u002Fa>\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CPU\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Foneapi-src\u002FoneDNN\">oneDNN\u003C\u002Fa>† ≥ 2.5.2，\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffacebookincubator\u002Fgloo\">gloo\u003C\u002Fa>（\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Ffacebookincubator\u002Fgloo\u002Fblob\u002F01e2c2660cd43963ce1fe3e21220ac01f07d9a4b\u002Fdocs\u002Frendezvous.md#using-mpi\">与 MPI 结合使用\u003C\u002Fa>）*^†\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>应用：全部\u003C\u002Ftd>\n    \u003Ctd>任意\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fglog\">Google Glog\u003C\u002Fa>†，\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgflags\u002Fgflags\">Gflags\u003C\u002Fa>†\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>应用：ASR\u003C\u002Ftd>\n    \u003Ctd>任意\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Flibsndfile\u002Flibsndfile\">libsndfile\u003C\u002Fa>*† ≥ 10.0.28，一个 BLAS 库（\u003Ca href=\"https:\u002F\u002Fsoftware.intel.com\u002Fcontent\u002Fwww\u002Fus\u002Fen\u002Fdevelop\u002Ftools\u002Foneapi\u002Fbase-toolkit\u002Fdownload.html\">Intel MKL\u003C\u002Fa> ≥ 2018，OpenBLAS† 等），以及 \u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fflashlight\u002Ftext\">flashlight\u002Ftext\u003C\u002Fa>*\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>应用：图像分类\u003C\u002Ftd>\n    \u003Ctd>任意\u003C\u002Ftd>\n    \u003Ctd>-\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>应用：语言模型\u003C\u002Ftd>\n    \u003Ctd>任意\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fflashlight\u002Ftext\">flashlight\u002Ftext\u003C\u002Fa>*\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>测试\u003C\u002Ftd>\n    \u003Ctd>任意\u003C\u002Ftd>\n    \u003Ctd>\u003Ca href=\"https:\u002F\u002Fgithub.com\u002Fgoogle\u002Fgoogletest\">Google Test（gtest，含 gmock）\u003C\u002Fa>*† ≥ 1.10.0\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n#### 构建选项\nFlashlight 的 CMake 构建支持以下构建选项（在命令行运行 CMake 时需以 `-D` 作为前缀）：\n\n\u003Ctable>\n\u003Cthead>\n  \u003Ctr>\n    \u003Cth>名称\u003C\u002Fth>\n    \u003Cth>选项\u003C\u002Fth>\n    \u003Cth>默认值\u003C\u002Fth>\n    \u003Cth>描述\u003C\u002Fth>\n  \u003C\u002Ftr>\n\u003C\u002Fthead>\n\u003Ctbody>\n  \u003Ctr>\n    \u003Ctd rowspan=\"2\">FL_BUILD_ARRAYFIRE\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>使用 ArrayFire 后端构建 Flashlight。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>如果未找到某些依赖项，则下载\u002F构建这些依赖项。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd rowspan=\"3\">FL_BUILD_LIBRARIES\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建 Flashlight 库。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建 Flashlight 神经网络库。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>启用分布式训练进行构建；应用程序需要此选项。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_CONTRIB\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建可能包含破坏性变更的 contrib API。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APPS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建应用程序（见下文）。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_ASR\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建自动语音识别应用程序。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_IMGCLASS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建图像分类应用程序。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_LM\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建语言模型应用程序。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_APP_ASR_TOOLS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建自动语音识别应用工具。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_TESTS\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建测试。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_EXAMPLES\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>ON\u003C\u002Ftd>\n    \u003Ctd>构建示例。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>FL_BUILD_EXPERIMENTAL\u003C\u002Ftd>\n    \u003Ctd>ON, OFF\u003C\u002Ftd>\n    \u003Ctd>OFF\u003C\u002Ftd>\n    \u003Ctd>构建实验性组件。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CMAKE_BUILD_TYPE\u003C\u002Ftd>\n    \u003Ctd>参见 \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_BUILD_TYPE.html\">文档\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>Debug\u003C\u002Ftd>\n    \u003Ctd>请参阅 \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_BUILD_TYPE.html\">CMake 文档\u003C\u002Fa>。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n  \u003Ctr>\n    \u003Ctd>CMAKE_INSTALL_PREFIX\u003C\u002Ftd>\n    \u003Ctd>[目录]\u003C\u002Ftd>\n    \u003Ctd>参见 \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_INSTALL_PREFIX.html\">文档\u003C\u002Fa>\u003C\u002Ftd>\n    \u003Ctd>请参阅 \u003Ca href=\"https:\u002F\u002Fcmake.org\u002Fcmake\u002Fhelp\u002Fv3.10\u002Fvariable\u002FCMAKE_INSTALL_PREFIX.html\">CMake 文档\u003C\u002Fa>。\u003C\u002Ftd>\n  \u003C\u002Ftr>\n\u003C\u002Ftbody>\n\u003C\u002Ftable>\n\n\n\n### 使用 Flashlight 构建您自己的项目\nFlashlight 最容易通过 CMake 进行链接。安装后，Flashlight 会导出以下 CMake 目标：\n- `flashlight::flashlight` — 包含 Flashlight 库以及核心自动微分和神经网络库。\n- `flashlight::fl_pkg_runtime` — 包含 Flashlight 核心以及用于训练的常用工具（日志记录 \u002F 标志 \u002F 分布式工具）。\n- `flashlight::fl_pkg_vision` — 包含 Flashlight 核心以及视觉流水线中的常用工具。\n- `flashlight::fl_pkg_text` — 包含 Flashlight 核心以及处理文本数据的常用工具。\n- `flashlight::fl_pkg_speech` — 包含 Flashlight 核心以及处理语音数据的常用工具。\n- `flashlight::fl_pkg_halide` — 包含 Flashlight 核心及与 Halide 轻松对接的扩展。\n\n假设有一个简单的 `project.cpp` 文件，它包含了 Flashlight 并与其链接：\n```c++\n#include \u003Ciostream>\n\n#include \u003Cflashlight\u002Ffl\u002Fflashlight.h>\n\nint main() {\n  fl::init();\n  fl::Variable v(fl::full({1}, 1.), true);\n  auto result = v + 10;\n  std::cout \u003C\u003C \"张量值为 \" \u003C\u003C result.tensor() \u003C\u003C std::endl; \u002F\u002F 11.000\n  return 0;\n}\n```\n\n以下 CMake 配置将链接 Flashlight 并设置包含目录：\n\n```cmake\ncmake_minimum_required(VERSION 3.10)\nset(CMAKE_CXX_STANDARD 17)\nset(CMAKE_CXX_STANDARD_REQUIRED ON)\n\nadd_executable(myProject project.cpp)\n\nfind_package(flashlight CONFIG REQUIRED)\ntarget_link_libraries(myProject PRIVATE flashlight::flashlight)\n```\n\n#### 使用 `vcpkg` 安装的 Flashlight\n\n如果您使用 `vcpkg` 安装了 Flashlight，则可以通过运行以下命令来构建上述 `myProject` 的 CMake 配置：\n```shell\ncd project && mkdir build && cd build\ncmake .. \\\n  -DCMAKE_TOOLCHAIN_FILE=[vcpkg 克隆路径]\u002Fscripts\u002Fbuildsystems\u002Fvcpkg.cmake \\\n  -DCMAKE_BUILD_TYPE=Release\nmake -j$(nproc)\n```\n\n#### 使用源码安装的 Flashlight\n\n如果您使用的是从源码安装的 Flashlight，CMake 将会自动找到 Flashlight：\n```shell\ncd project && mkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release\nmake -j$(nproc)\n```\n如果 Flashlight 安装在自定义位置，并使用了 `CMAKE_INSTALL_PREFIX`，则可以在 `cmake` 命令中添加 `-Dflashlight_DIR=[安装前缀]\u002Fshare\u002Fflashlight\u002Fcmake` 参数，以帮助 CMake 找到 Flashlight。\n\n### 使用 Docker 构建和运行 Flashlight\nFlashlight 及其依赖项也可以使用提供的 Dockerfile 进行构建；有关更多信息，请参阅随附的 [Docker 文档](.docker)。\n\n### 贡献与联系信息\n联系人：vineelkpratap@fb.com, awni@fb.com, jacobkahn@fb.com, qiantong@fb.com, antares@fb.com, padentomasello@fb.com,\njcai@fb.com, gab@fb.com, vitaliy888@fb.com, locronan@fb.com\n\nFlashlight 正在积极开发中。有关如何参与贡献的更多信息，请参阅\n[CONTRIBUTING](CONTRIBUTING.md)。\n\n#### 致谢\nFlashlight 的部分代码源自\n[arrayfire-ml](https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire-ml\u002F)。\n\n## 引用\n您可以使用以下方式引用 [Flashlight](https:\u002F\u002Farxiv.org\u002Fabs\u002F2201.12465)：\n```\n@misc{kahn2022flashlight,\n      title={Flashlight: Enabling Innovation in Tools for Machine Learning},\n      author={Jacob Kahn and Vineel Pratap and Tatiana Likhomanenko and Qiantong Xu and Awni Hannun and Jeff Cai and Paden Tomasello and Ann Lee and Edouard Grave and Gilad Avidov and Benoit Steiner and Vitaliy Liptchinsky and Gabriel Synnaeve and Ronan Collobert},\n      year={2022},\n      eprint={2201.12465},\n      archivePrefix={arXiv},\n      primaryClass={cs.LG}\n}\n```\n\n## 许可证\nFlashlight 采用 MIT 许可证。有关更多信息，请参阅 [LICENSE](LICENSE)。","# Flashlight 快速上手指南\n\nFlashlight 是一个由 Facebook AI Research 开发的快速、灵活的 C++ 机器学习库。它完全用 C++ 编写，具有小巧的体积（核心代码约 2 万行）、高性能默认配置以及对自动微分和张量计算的全面支持。\n\n## 1. 环境准备\n\n在开始之前，请确保您的开发环境满足以下最低要求：\n\n*   **操作系统**: Linux (推荐 Ubuntu\u002FCentOS)\n*   **编译器**: 支持 C++17 的编译器 (如 `gcc`\u002F`g++` >= 7)\n*   **构建工具**: `CMake` (版本 3.10+) 和 `make`\n*   **包管理器**: 推荐使用 `vcpkg` 进行依赖管理\n\n### 前置依赖\n根据您选择的后端（CPU 或 CUDA），需要安装不同的基础库：\n\n*   **通用依赖**: Intel MKL (用于数学计算)\n*   **CPU 后端**: 无额外特殊要求（MKL 已涵盖主要需求）\n*   **GPU 后端 (CUDA)**:\n    *   CUDA Toolkit (>= 9.2)\n    *   cuDNN\n    *   NCCL (用于多卡通信)\n\n> **提示**: 国内开发者若遇到依赖下载缓慢问题，可配置 `vcpkg` 使用国内镜像源，或在构建时通过代理加速。\n\n## 2. 安装步骤\n\n推荐使用 `vcpkg` 进行安装，这是最简便的方式，可自动处理复杂的依赖关系。\n\n### 第一步：安装 vcpkg\n如果尚未安装 `vcpkg`，请先克隆并引导它：\n```bash\ngit clone https:\u002F\u002Fgithub.com\u002Fmicrosoft\u002Fvcpkg.git\ncd vcpkg\n.\u002Fbootstrap-vcpkg.sh\n```\n\n### 第二步：安装 Flashlight\n根据您的硬件环境选择以下任一命令安装：\n\n**选项 A：安装 CPU 版本**\n```bash\n.\u002Fvcpkg install flashlight-cpu\n```\n\n**选项 B：安装 CUDA (GPU) 版本**\n*(请确保已预先安装好 CUDA, cuDNN 和 NCCL)*\n```bash\n.\u002Fvcpkg install flashlight-cuda\n```\n\n**可选：安装特定应用组件**\n如果您需要使用语音识别 (ASR)、图像分类等预置应用，可以通过特性标志安装：\n```bash\n# 示例：安装带有 ASR 功能的 CUDA 版本\n.\u002Fvcpkg install flashlight-cuda[asr]\n```\n\n### 第三步：集成到项目\n在您的 `CMakeLists.txt` 中，通过 toolchain 文件引入 `vcpkg` 即可自动链接 Flashlight：\n```cmake\nset(CMAKE_TOOLCHAIN_FILE ${VCPKG_ROOT}\u002Fscripts\u002Fbuildsystems\u002Fvcpkg.cmake CACHE STRING \"Vcpkg toolchain file\")\nfind_package(flashlight CONFIG REQUIRED)\ntarget_link_libraries(your_target PRIVATE flashlight::fl)\n```\n\n## 3. 基本使用\n\nFlashlight 的核心在于其简洁的 API 设计，支持通过 `Sequential` 串联网络层，并利用 `Variable` 实现基于 Tape 的自动微分。\n\n### 构建一个简单的卷积神经网络 (ConvNet)\n\n以下示例展示了如何定义一个包含卷积、池化和全连接层的模型：\n\n```c++\n#include \u003Cflashlight\u002Ffl\u002Fflashlight.h>\n\n\u002F\u002F 定义序列模型\nSequential model;\n\n\u002F\u002F 添加层\nmodel.add(View(fl::Shape({IM_DIM, IM_DIM, 1, -1})));\nmodel.add(Conv2D(\n    1, 32, 5, 5, 1, 1, \n    PaddingMode::SAME, PaddingMode::SAME)); \u002F\u002F 输入通道，输出通道，核大小，步长等\nmodel.add(ReLU());\nmodel.add(Pool2D(2, 2, 2, 2));\nmodel.add(Conv2D(32, 64, 5, 5, 1, 1, PaddingMode::SAME, PaddingMode::SAME));\nmodel.add(ReLU());\nmodel.add(Pool2D(2, 2, 2, 2));\nmodel.add(View(fl::Shape({7 * 7 * 64, -1})));\nmodel.add(Linear(7 * 7 * 64, 1024));\nmodel.add(ReLU());\nmodel.add(Dropout(0.5));\nmodel.add(Linear(1024, 10));\nmodel.add(LogSoftmax());\n```\n\n### 前向传播与反向传播\n\nFlashlight 的前向和反向计算非常直观：\n\n```c++\n\u002F\u002F 假设 input 和 target 已定义\nauto output = model.forward(input);\n\n\u002F\u002F 计算损失 (交叉熵)\nauto loss = categoricalCrossEntropy(output, target);\n\n\u002F\u002F 执行反向传播，自动计算梯度\nloss.backward();\n```\n\n### 自动微分示例\n\n直接使用 `Variable` 包装张量即可启用自动求导：\n\n```c++\n\u002F\u002F 创建需要计算梯度的变量\nauto A = Variable(fl::rand({1000, 1000}), true \u002F* calcGrad *\u002F);\n\n\u002F\u002F 构建计算图\nauto B = 2.0 * A;\nauto C = 1.0 + B;\nauto D = log(C);\n\n\u002F\u002F 反向传播，梯度将填充到 A.grad() 以及中间变量中\nD.backward(); \n```\n\n现在您可以开始使用 Flashlight 进行高效的 C++ 深度学习开发了。更多详细教程（如 MNIST 完整训练循环）请参考官方文档。","某语音识别初创团队正在研发一款低延迟的实时会议转录系统，需要在资源受限的边缘设备上部署高性能模型。\n\n### 没有 flashlight 时\n- **开发效率低下**：团队被迫使用 Python 原型验证后再用 C++ 重写，双重维护导致算法迭代周期长达数周。\n- **依赖包袱沉重**：引入重型深度学习框架导致最终二进制文件体积过大，难以在嵌入式环境中运行。\n- **底层定制困难**：框架黑盒特性使得针对特定音频硬件优化算子变得极其复杂，无法微调内部张量计算逻辑。\n- **推理延迟过高**：通用框架的默认配置无法满足实时语音流处理的毫秒级响应需求。\n\n### 使用 flashlight 后\n- **全流程 C++ 开发**：利用 flashlight 纯 C++ 特性实现从实验到部署的无缝衔接，新算法上线时间缩短至几天。\n- **极致轻量部署**：核心库仅 20k 行代码且体积小于 10MB，轻松集成到资源紧张的边缘设备中。\n- **深度内核定制**：借助其完全可修改的内部 API，团队直接优化了音频预处理和张量计算内核，完美适配专用硬件。\n- **高性能即时编译**：通过基于 ArrayFire 的 JIT 编译机制，显著降低推理延迟，实现了流畅的实时会议转录。\n\nflashlight 通过提供轻量、可深度定制的纯 C++ 环境，帮助团队打破了原型与生产环境的壁垒，在保障极致性能的同时大幅加速了语音算法的落地进程。","https:\u002F\u002Foss.gittoolsai.com\u002Fimages\u002Fflashlight_flashlight_5f0a53bc.png","https:\u002F\u002Foss.gittoolsai.com\u002Favatars\u002Fflashlight_8492668a.png","A C++ standalone library for machine learning.",null,"jacobkahn@fb.com","https:\u002F\u002Fgithub.com\u002Fflashlight",[78,82,86,90,94,97,101],{"name":79,"color":80,"percentage":81},"C++","#f34b7d",78.5,{"name":83,"color":84,"percentage":85},"Jupyter Notebook","#DA5B0B",16.7,{"name":87,"color":88,"percentage":89},"CMake","#DA3434",4,{"name":91,"color":92,"percentage":93},"Python","#3572A5",0.3,{"name":95,"color":96,"percentage":93},"C","#555555",{"name":98,"color":99,"percentage":100},"Cuda","#3A4E3A",0.2,{"name":102,"color":103,"percentage":104},"Shell","#89e051",0.1,5440,503,"2026-04-09T07:51:40","MIT","Linux","可选。若使用 CUDA 后端，需 NVIDIA GPU 且 CUDA >= 9.2，同时需安装 cuDNN 和 NCCL；CPU 后端无需 GPU。","未说明",{"notes":113,"python":114,"dependencies":115},"该工具主要用 C++ 编写。推荐使用 vcpkg 进行依赖管理和安装。支持两种后端：CPU 后端和 CUDA 后端。若从源码构建，需根据目标功能（如语音识别、图像分类等）安装特定的额外依赖库（如 fftw3, kenlm, libsndfile 等）。官方提供 Docker 镜像以简化环境配置。","未说明（Python 绑定需单独查看 bindings\u002Fpython\u002FREADME.md）",[116,117,118,119,120,121,122,123,124],"C++ 编译器 (支持 C++17, 如 gcc\u002Fg++ >= 7)","CMake >= 3.10","make","ArrayFire","Intel MKL","CUDA >= 9.2 (仅 GPU 版)","cuDNN (仅 GPU 版)","NCCL (仅 GPU 版)","vcpkg (推荐包管理器)",[14],[64,127,128,129,130,131,132],"machine-learning","autograd","cpp","deep-learning","neural-network","ml","2026-03-27T02:49:30.150509","2026-04-19T06:02:48.498103",[136,141,145,150,155,159],{"id":137,"question_zh":138,"answer_zh":139,"source_url":140},41851,"构建 CPU 后端时出现链接错误（undefined reference to testing::internal...）怎么办？","这是因为旧版本的 CPU 后端存在构建问题。维护者已更新 CPU 后端以使用 oneDNN >= 2.0 并修复了相关错误。请从 master 分支拉取最新代码并重新尝试构建：\ngit pull origin master\n如果问题仍然存在，请确保您的构建环境满足 oneDNN 的版本要求。","https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Fissues\u002F145",{"id":142,"question_zh":143,"answer_zh":144,"source_url":140},41852,"运行 make install 时提示 'libmkl_rt.so: cannot open shared object file' 错误如何解决？","该错误表明系统无法找到 Intel MKL 的共享库文件。通常是因为环境变量未正确设置。请执行以下命令加载 Intel oneAPI 环境变量：\nsource \u002Fopt\u002Fintel\u002Foneapi\u002Fsetvars.sh\n执行后再重新运行 make install。注意：CPU 后端在某些情况下可能运行较慢，这是已知现象。",{"id":146,"question_zh":147,"answer_zh":148,"source_url":149},41853,"CMake 配置成功但 make 命令卡住不动是什么原因？","这通常是由于缺少必要的依赖库或环境变量未生效导致的。特别是使用 Intel MKL 时，必须手动加载环境变量。请执行：\nsource \u002Fopt\u002Fintel\u002Foneapi\u002Fsetvars.sh\n然后清理构建目录并重新构建：\nrm -rf build && mkdir build && cd build\ncmake .. -DCMAKE_BUILD_TYPE=Release -DFLASHLIGHT_BACKEND=CPU\nmake -j$(nproc)\n如果仍然卡住，请检查是否有足够的内存和 CPU 资源。","https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Fissues\u002F124",{"id":151,"question_zh":152,"answer_zh":153,"source_url":154},41854,"导入 flashlight.lib.text.decoder 时出现 'ModuleNotFoundError' 或 'NameError' 怎么办？","此错误通常不是代码逻辑问题，而是文件路径或权限问题。当 flashlight-text 尝试加载词典文件失败时会抛出此类异常。请检查：\n1. 确认词典文件路径是否正确且文件存在\n2. 检查当前用户是否有读取该文件的权限\n3. 尝试在 Python 中直接打开该文件测试：open('your_lexicon_path', 'r')\n如果文件存在且可读，请确保 kenlm 等依赖已正确安装在预期位置（如 \u002Fusr\u002Flocal\u002Fshare\u002Fkenlm）。","https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Fissues\u002F1025",{"id":156,"question_zh":157,"answer_zh":158,"source_url":149},41855,"CPU 后端构建完成后运行速度非常慢是否正常？","是的，CPU 后端的性能通常远低于 GPU 后端。有用户反馈即使是简单的线性回归示例也可能需要数小时才能完成。这是架构限制导致的正常现象。如果需要更快的训练和推理速度，建议：\n1. 使用 GPU 后端（需安装 CUDA 和 ArrayFire GPU 版本）\n2. 优化模型结构和批量大小\n3. 考虑使用预编译的二进制包而非源码编译",{"id":160,"question_zh":161,"answer_zh":162,"source_url":149},41856,"如何正确配置 CMake 以使用 CPU 后端进行构建？","使用以下 CMake 命令配置 CPU 后端构建：\ncmake .. -DCMAKE_BUILD_TYPE=Release -DFLASHLIGHT_BACKEND=CPU\n确保在执行前已加载所有必要的环境变量（如 Intel oneAPI）：\nsource \u002Fopt\u002Fintel\u002Foneapi\u002Fsetvars.sh\n如果找不到 cereal 库，CMake 会自动从源码下载，无需手动安装。构建时使用多核加速：\nmake -j$(nproc)",[164,169,174,179,184],{"id":165,"version":166,"summary_zh":167,"released_at":168},333884,"v0.3.2","这是一个补丁版本，也是在对 Flashlight 引入破坏性变更之前发布的最后一个版本，这些破坏性变更将影响 Flashlight 的 Tensor 框架（`fl::Tensor`）。**此版本及 `v0.3.x` 系列的其他补丁版本将根据需要在 `0.3` 分支上更新，该分支将从主分支分离。**\r\n\r\n本版本的修复包括：\n- 构建修复，移除了安装时出现的空目标问题 (#834)\n- 更新了 Google Mock 的语法，要求最低版本为 1.10。\n- 更新了用于引用 FL 的 `CITATION` 文件\n- 根据破坏性变更对 CircleCI 进行了更新\n- 改进了 CMake 查找 BLAS 库的功能 (#806)\n- 修复了批量矩阵乘法的梯度计算问题 (#760)\n- 将 Flashlight 组件重构为基于 `pkg` 的目录结构 (#713)\n\n本版本还对 Flashlight Tensor API（`flashlight\u002Ffl\u002Ftensor`）进行了改进，包括：\n- 为 Tensor 添加了 `roll` 操作符\n- 修复了 `ArrayFireBackend` 状态的静态初始化问题\n- 修复了使用 `ArrayFireBackend` 时的 `concatenate` 操作\n- 改进了 Tensor 和 Shape 的字符串化函数 (#808)\n- 新增了 `TensorBackend::isDataTypeSupported()` 和 `TensorBackend::getDeviceCount()`\n- 添加了一种同时返回值和索引的排序操作 (#809)\n- 增强了对 `Shape` 中越界索引的保护 (#810)\n- 引入了用于自动微分和视觉原语的 `TensorExtension` API (#762)\n- 实现了标量对 Tensor 的幂运算 (#774)\n- 支持 Tensor 在二元操作中的广播机制 (#775)\n- 新增了标量（0D）Tensor 类型\n- 添加了翻转操作符 (#766)\n- 新增了四舍五入和 cumsum 操作符\n- 现在，返回主机端原生类型的约简操作将改为返回 Tensor (#755)","2022-03-19T17:22:17",{"id":170,"version":171,"summary_zh":172,"released_at":173},333885,"v0.3.1","v0.3.1 是一个补丁版本，包含了自 v0.3 版本及初始 `fl::Tensor` API 以来的修复。\n\n### 新特性\n- 引入 `fl::Tensor` API。更多信息请参阅 [`flashlight\u002Ffl\u002Ftensor`](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Ftree\u002Fmaster\u002Fflashlight\u002Ffl\u002Ftensor)。\n  - Flashlight 将在后续版本中适配并使用该 API。\n- 提供一个分布式存根后端，以便在暂时没有分布式后端的情况下构建应用（该功能将在后续版本中解耦）(#614)\n- 增加了一个 `benchmark` 应用，用于对常见模型进行端到端性能基准测试。\n- 最低 C++17 要求。\n- 引入 `DynamicScaler`，以抽象混合精度训练中的重复逻辑。\n- 支持 DETR、ResNet 和 ViT 的自动混合精度训练。\n- Codecov 集成。\n\n### 修复\n- 修改 Conformer 跳跃连接的行为 (#587)\n- 修复高级索引内核中的类型推断问题。\n- 移除反向传播中的 `eval()` 调用。\n- 为音频增强添加序列化支持。\n- 重写 `SinusoidalPositionEmbedding` 算子，避免拼接操作。\n\n感谢以下外部贡献者的贡献：\n@lunixbochs  \n@tlikhomanenko","2021-10-15T17:02:14",{"id":175,"version":176,"summary_zh":177,"released_at":178},333886,"v0.3","整合后的首个稳定版本。将 Flashlight 分为四个部分：\n\n- [**`flashlight\u002Flib`**](flashlight\u002Flib) 包含用于序列损失、束搜索解码、文本处理等的内核和独立工具。\n- [**`flashlight\u002Ffl`**](flashlight\u002Ffl) 是基于 [ArrayFire](https:\u002F\u002Fgithub.com\u002Farrayfire\u002Farrayfire) 张量库的核心神经网络库。\n- [**`flashlight\u002Fapp`**](flashlight\u002Fapp) 是核心库在不同领域机器学习中的应用。\n- [**`flashlight\u002Fext`**](flashlight\u002Fext) 是建立在 Flashlight 和 ArrayFire 之上的扩展，可在多个应用中使用。\n\n## 主要特性\n\n- 自动混合精度训练 (AMP) —— 类型化的张量和自动求导算子\n- 基于 ArrayFire 构建自定义内存管理器的框架 ([文档](docs\u002Fsource\u002Fmemory.rst))\n- 将 OneDNN 用作 CPU 上原语操作的后端\n- `core` 模块中的新数据集抽象 ([`flashlight\u002Ffl\u002Fdataset`](flashlight\u002Ffl\u002Fdataset))\n- 应用库：\n  - 语音识别 ([flashlight\u002Fapp\u002Fasr](flashlight\u002Fapp\u002Fasr))（原 [wav2letter](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fwav2letter\u002F) 项目）\n  - 语言模型 ([flashlight\u002Fapp\u002Flm](flashlight\u002Fapp\u002Flm))（自回归及掩码\u002FBERT 风格的语言模型）\n  - 图像分类 ([flashlight\u002Fapp\u002Fimgclass](flashlight\u002Fapp\u002Fimgclass))（ResNet、ViT）\n  - 目标检测 ([flashlight\u002Fapp\u002Fobjdet](flashlight\u002Fapp\u002Fobjdet))（DETR）\n- 语音增强库（ASR）\n- 使用迭代伪标签法训练模型的工具（ASR）\n- [早期] OpenCL 支持，兼容 RoCM 和 Intel\n\n## 构建方面的变更与改进\n\n- 支持 C++17 —— 需要 gcc 7 或 clang 6。\n- 通过 `FL_BUILD_STANDALONE` 支持 `vcpkg`。\n- 整合了 [wav2letter](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fwav2letter\u002F) 项目，并优化了基于应用的构建选择。\n- CMake 最低版本提升至 3.10，对共享对象的支持更好。\n- 对 CUDA 和 Halide 内核的一流支持。\n- 改进了未找到依赖项的下载功能（Gloo、KenLM、libsndfile）。\n- 改进了下游项目使用 Flashlight 已安装 CMake 配置时的依赖管理（[`cmake\u002FflashlightConfig.cmake.in`](cmake\u002FflashlightConfig.cmake.in)）。\n- 支持 Transformer\u002F多头注意力机制中的填充。\n- 针对原始波形的 SpecAugment 实现（通过低通滤波器实现）。\n- Conformer 的实现。\n- 改进了索引运算符的自动求导功能（支持重复索引）。\n- 优化了 Python 绑定的构建，支持 `setup.py install`。\n- 大量文档更新。\n\n## wav2letter 中的改进与新功能（[`flashlight\u002Fapp\u002Fasr`](https:\u002F\u002Fgithub.com\u002Fflashlight\u002Fflashlight\u002Ftree\u002Fmaster\u002Fflashlight\u002Fapp\u002Fasr)）\n- 修复了序列到序列模型中的填充问题：预训练窗口、编码器注意力、编码器-解码器注意力。\n- 重构了序列到序列代码库。\n- 优化了序列到序列束搜索解码器的内存分配（减少内存占用，避免 OOM 问题）。\n- 修复了束搜索解码器，使其支持非空上下文。\n- 修复了数据集流水线，并增加了动态批处理支持。\n\n","2021-04-16T22:30:55",{"id":180,"version":181,"summary_zh":182,"released_at":183},333887,"v0.2","这是一个旧版本，也是在 wav2letter 被 [整合进 Flashlight](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fflashlight) 之前的最后一个版本。有关新的 wav2letter 源代码，请参阅 Flashlight 中的 ASR 应用程序：[Flashlight ASR 应用程序说明](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fflashlight\u002Fblob\u002Fmaster\u002Fflashlight\u002Fapp\u002Fasr\u002FREADME.md)。\n\nFlashlight 的核心库已迁移到 [`flashlight\u002Ffl`](https:\u002F\u002Fgithub.com\u002Ffacebookresearch\u002Fflashlight\u002Ftree\u002Fmaster\u002Fflashlight\u002Ffl)。","2020-12-28T17:19:38",{"id":185,"version":186,"summary_zh":187,"released_at":188},333888,"v0.1","## 使用 Flashlight 打造原生应用\n\n要开始使用，请访问[文档](https:\u002F\u002Ffl.readthedocs.io\u002Fen\u002Flatest\u002F)。\n\n## 致谢\n\n感谢以下贡献者：\n\nVineel Pratap、Awni Hannun、Jacob Kahn、Qiantong Xu、Jeff Cai、Gabriel Synnaeve、Vitaliy Liptchinsky、Ronan Collobert、Ann Lee、Jay Mahadeokar 和 Tatiana Likhomanenko","2018-12-22T06:42:10"]