Project Icon

koila

通过一行代码解决CUDA内存不足错误

Koila是一个开源项目,通过一行代码解决CUDA内存不足错误。它包含自动累积梯度、惰性求值和批次大小优化功能,使GPU计算更高效。作为轻量级PyTorch包装器,Koila自动计算GPU的剩余内存,并选用适当的批次大小,从而保持与PyTorch的兼容性。

🐨 Koila

Koila 可以无痛解决 CUDA error: out of memory error 问题。
只需一行代码即可修复,然后忘掉它。

单元测试
类型检查
格式化
许可证: MIT
Tweet

Koila

🚨 警告

主分支是项目的一个全新重构(目前因为我没有足够时间完成,所以大部分是空的)。要查看可用代码,请检出 v0.1.1 标签的概念验证版本(不完全支持所有操作,不适合生产环境)。要使用它,请下载 v0.1.1 版本

🚀 功能

  • 🙅 通过一行代码防止 CUDA error: out of memory error

  • ⚗️ 当批次大小过大时自动累积梯度。

  • 🦥 懒加载执行 PyTorch 代码以节省计算资源。

  • ✂️ 自动沿批次维度拆分为更适合 GPU 的数量(2 的幂)以加快执行速度。

  • 🤏 最小化 API(只需包装所有输入即可)。

🤔 为什么选择 Koila?

是否曾遇到 RuntimeError: CUDA error: out of memory
我们都喜欢 PyTorch 的速度、效率和透明性,但这也意味着它不会做额外的事情。比如,防止自 2017 年以来困扰许多用户的一个非常常见的错误(2017)。

这个库旨在通过对原生 PyTorch 进行轻量级包装来防止这种情况发生。当一个张量被包装时,库会自动计算剩余的 GPU 内存,并使用合适的批次大小,免去了每次使用模型时手动调整批次大小的麻烦。

此外,库会自动为 GPU 选择合适的批次大小。你知道使用更大的批次并不总是加快处理速度吗?这个库也会自动处理这一点。

因为 Koila 的代码其实就是 PyTorch 代码,它在底层运行 PyTorch,所以你可以一起使用而不必担心兼容性问题。

哦,而且这一切只需一行代码!😊

⬇️ 安装

Koila 已在 PyPI 上发布。要安装,请运行以下命令:

pip install koila

🏃 入门

使用非常简单。例如,你有如下 PyTorch 代码(来自 PyTorch教程):

定义输入、标签和模型:

# 一批 MNIST 图片
input = torch.randn(8, 28, 28)

# 一批标签
label = torch.randn(0, 10, [8])

class NeuralNetwork(Module):
    def __init__(self):
        super(NeuralNetwork, self).__init__()
        self.flatten = Flatten()
        self.linear_relu_stack = Sequential(
            Linear(28 * 28, 512),
            ReLU(),
            Linear(512, 512),
            ReLU(),
            Linear(512, 10),
        )

    def forward(self, x):
        x = self.flatten(x)
        logits = self.linear_relu_stack(x)
        return logits

定义损失函数,计算输出和损失:

loss_fn = CrossEntropyLoss()

# 计算损失
out = nn(t)
loss = loss_fn(out, label)

# 反向传播
nn.zero_grad()
loss.backward()

好吧,如何将代码适配使用 Koila 的功能?

你只需添加这一行代码(v0.1.1 版本):

# 包装输入张量和标签张量。
# 如果提供了批次参数,该张量的维度将被视为批次维度。
# 在此情况下,第一个维度(dim=0)用作批次维度。
(input, label) = lazy(input, label, batch=0)

搞定。你将不会再遇到内存不足的问题。

🏋️ 它的工作原理是什么?

CUDA error: out of memory 通常发生在前向传播时,因为临时变量需要保存在内存中。

Koila 是一个轻量级的 PyTorch 包装库。它受到 TensorFlow 的静态/惰性评估的启发。通过先构建图表,并仅在必要时运行模型,模型可以访问所有必要的信息来确定计算模型实际需要多少资源。

在内存使用方面,仅需要临时变量的形状即可计算模型中使用的这些变量的内存使用量。例如,+ 操作接收两个相同大小的张量,并输出一个大小等于输入大小的张量,而 log 操作接收一个张量,并输出另一个形状相同的张量。广播使得事情稍微复杂了一点,但总体思想是相同的。通过跟踪所有这些形状,人们可以轻松地判断前向传播中使用了多少内存,并相应地选择最佳的批次大小。

🐌 听起来很慢。是吗?

不是的。确实,计算形状和计算大小及内存使用量听起来像是很多工作。然而,请记住,即使是像 GPT-3 这样巨大的模型,它有 96 层,其计算图中也只有几百个节点。由于 Koila 的算法是线性时间的,任何现代计算机都可以瞬间处理这样一个图。

大部分计算都花在计算单个张量和在设备之间传输张量上。请记住,这些检查在原生 PyTorch 中也是发生的。所以,不会慢。

🔊 Koila 怎么发音?

这个项目最初命名为 koala,因为树懒是世界上最懒的物种,而这个项目是关于张量的惰性评估。然而,由于该名字在 PyPI 上已被占用,我不得不使用另一个名字。Koila 是一个我自己创造的词,发音类似于 voila(这是一个法语词),所以听起来像 koala。

⭐ 给我一颗星!

如果你喜欢这个项目,请考虑给它一颗星(★)!

🏗️ 为什么我会构建这个项目,尽管有类似的库?

为什么尽管互联网上已经有许多类似的库,我还是要费力构建这个项目?

🔎 批次大小搜索

批次大小搜索并不新鲜。事实上,非常流行的 Lightning 已经实现了它。

Lightning 的批次大小搜索深度集成在其自身的生态系统中。你必须使用其 DataLoader,从他们的模型中进行子类化,并相应地训练你的模型。虽然将监督学习任务重构为使用 Lightning 相对容易,但对于强化学习代码库来说,必须与环境交互,进行相同的操作非常痛苦。

相比之下,因为 Koila 是一个超级轻量级的 PyTorch 包装

项目侧边栏1项目侧边栏2
推荐项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号