给科研人的 ML 开源发布工具包

news2024/11/27 10:38:57

什么是开源发布工具包?

恭喜你的论文成功发表,这是一个巨大的成就!你的研究成果将为学界做出贡献。

其实除了发表论文之外,你还可以通过发布研究的其他部分,如代码、数据集、模型等,来增加研究的可见度和采用率。这将使更多人能够使用你的研究,并推动研究成果的应用。我们整理了这份文件,让你可以更好的了解和实践开源。希望这份文件对你有所帮助!

什么是开源?

公开研究 - 不仅仅是论文,还包括相关的所有成果,如代码、模型、数据集或在线演示。

为什么要开源?

进行开放获取研究[^1],可以让更多的人了解和使用你的研究或项目成果,促进社区研究人员之间的合作。通过共享机器学习的知识和资源以及社区协作,来推动机器学习领域的发展。

[^1]: 开放获取意味着一个成果是公开可访问的。例如,你可以公开发布一个模型,同时拥有一个不完全符合开源倡议组织 (OSI) 对开源所设定的确切标准的许可证。例如,如果许可证限制了模型的使用方式,它就不被视为开源。不过,它仍然是对社区有价值的开放获取成果!

如何开源?

机器学习发布有很多的形式和规模。你可以根据你的时间线、优先级、内部政策或者其他因素来决定如何开源和开源哪些内容。比如:你可以只公布代码,也可以公布模型等其他成果。

以下是开源的步骤概览:

  • 论文

  • 代码仓库

  • 数据集

  • 模型

  • 构建在线演示 demo

  • 推广应用

你可以自由定义想要发布的内容、如何发布以及什么时间进行发布;本文档会详细介绍上述每项内容的具体步骤和指导。

你会用到什么工具?

分享论文可以使用arXiv :这是一个免费的可以公开发表论文的平台,在机器学习领域中被广泛使用。

分享代码可以使用 GitHub :这是一个代码版本控制平台。在 GitHub 上,你可以分享训练代码、如何加载模型或数据集的示例等。

分享模型权重,数据集及演示则可以使用 Hugging Face Hub :HF 是一个协作式机器学习平台,人们可以在其中轻松地探索、体验并共同创建机器学习。此外它还提供一定的社交功能,如论文讨论。

如何使用这份文档?

这份文档提供了具体的项目和步骤指导,你可以选择按照步骤完成所有项目成果的发布,也可以根据自己的需求来选择想要发布的项目成果。步骤看似很多,但是每一步仅需不到一分钟的时间即可完成。我们建议你复制这份文档,以便随时查阅。文档末尾会有一个核对清单,帮助你核对每一步,为开源你的项目成果做好充分的准备。

热门开源发布示例

  • Meta 的 Llama 2 (论文, 代码库, 模型, 演示)

  • EPFL 的 Meditron (论文, 代码库, 模型, 数据)

  • Adept 的 Fuyu (博客, 模型, 演示)

  • Meta 的 Seamless (论文, 代码库, 合集)

GitHub 仓库:

  • https://github.com/facebookresearch/seamless_communication

  • https://github.com/CompVis/stable-diffusion

研究模型:

  • https://huggingface.co/microsoft/phi-2

  • https://huggingface.co/meta-llama/Llama-2-7b

研究数据集:

  • https://huggingface.co/datasets/epfl-llm/guidelines

  • https://huggingface.co/datasets/princeton-nlp/SWE-bench

在线演示:

  • https://huggingface.co/spaces/facebook/seamless_m4t

  • https://huggingface.co/spaces/andreped/AeroPath

发布论文

可以通过 arXiv 来 上传并与社区分享你的论文。这是一个免费平台,并且不需要同行评审。

  1. 撰写并准备论文

    第一步是撰写论文。一个常用的协作论文撰写工具是 Overleaf(用于 LaTeX 工作)。如果向会议提交论文,请遵循它们的官方模板和风格指南

    查阅 arXiv 官方的指南,包括格式期望和授权许可。

31f089b81aaccca5b9906597b5c5902f.png
  1. 提交论文

    访问你的 用户页面 并点击“提交”即可提交可能需要一些时间来处理,并且只在周日至周四开放。

    注意: 首次提交到某个类别时,需要社区中的某人认可它才能发布。但请注意,这不是同行评审!

5253b03daa07e5ce920bcc79b0a04b3f.png

发布代码库

可以使用 GitHub 来发布和分享代码。GitHub 是一个代码版本控制平台。在 GitHub 上,你可以分享你的代码库(包括推理/建模代码、训练代码等)。

  1. 在 https://github.com/new 创建一个带有 README 和你选择的许可证的仓库。

833395f5d2efb6c0989fb5333ca77d4a.png
  1. 编写 README。

    README 是描述项目的文件,一般使用 markdown 编写,这是一种用于文本格式化的相当简单的语言。建议在README中添加描述、成果链接(如你的论文)以及一些代码示例。

    示例

771c173b6ae8f43802dc2a1b9da57daa.png
  1. 上传代码

    接下来就是要上传你的代码了!你可以上传包括运行模型的代码、训练脚本或者更多内容!

如果你想同时将你的模型集成到 Hugging Face 库中,以实现即时集成。请随时联系 open-source@huggingface.co,我们会尽快评估并反馈。

发布数据集

Hugging Face Hub 提供数据集的托管、发现和社交功能。HF 还有一个名为 datasets 的开源库,可用于以编程方式加载数据集,并在大型数据集上有效地进行流式处理。此外,HF 还提供查看器,可让用户在浏览器中直接探索数据。

  1. 在 https://huggingface.co/new-dataset 创建一个仓库,可以在你的账户或在组织名下进行创建。

9b66815014196f55136dccdae663422e.png
  1. 向仓库添加文件。

    在仓库的 文件和版本 选项卡并点击“上传文件”。支持拖放文件/文件夹或直接上传。

    4cb3cdef227dad9df3bd167a3130a359.pngf7829cb62295e56bcd74ffce7bf53b4b.png

    注意:Hub 支持不同的文件格式。这些格式将在浏览器中获得查看器,并自动在 datasets 库中获得支持。对于其他格式,你可以编写自己的加载脚本。查看官方文档。

from datasets import load_dataset
   dataset = load_dataset("stevhliu/demo")

注意: Hugging Face 使用 Git 作为数据和代码的存储库。如果熟悉 Git(例如,如果你使用 GitHub 或 GitLab),你可以使用类似的工作流程,而无需使用 UI。更多详情见指南。你还可以使用datasets 库来推送仓库。

  1. 创建数据集卡片

    数据集卡片是包含数据集相关信息的文件,通常与数据集一起发布,用于帮助用户更好地理解和使用数据集。数据集卡片对于促进数据集的可发现性、可重复性和共享具有重要作用。

    除了主要内容之外,数据集卡片还包含顶部的元数据,例如许可证类型、任务类别等。这些元数据可以帮助用户快速了解数据集的相关信息,从而更好地选择合适的数据集进行研究或开发。

    我们强烈建议定义数据集的许可证类型,以便用户了解数据集的使用权限和限制。同时,明确定义数据集的任务类别,可以帮助用户更准确地找到与其研究或开发相关的数据集。数据的可发现性和使用都是数据集的重要属性,数据集卡片可以有效地促进这两项属性的提升。

c45b9579f20bc9a362a21656973c9ab7.png

我们建议在数据集卡片内容中添加指向你的 arXiv 论文的链接。HF 会自动将它们链接在一起。你可以在其官方文档中阅读有关数据集卡片的更多信息。

发布模型权重

Hugging Face Hub 为模型提供托管、发现和社交功能。它不局限于 HF 官方库,你可以分享任何 ML 库的模型权重(或分享自己的代码库)。

  1. 在 https://huggingface.co/new 创建一个仓库,可以在你的账户或组织名下创建仓库。

35b2f9361d60a60322afddefe0aca116.png
  1. 向仓库添加文件。

    在仓库的文件选项卡并点击“上传文件”。可以拖放文件/文件夹或直接上传。

061e0778b770e9f9b50bd26bfd608d82.png 5d14ed4dc01fe711cb2ea7e60e45f549.png

注意:Hugging Face 使用 Git 作为数据和代码的存储库。如果你熟悉 Git(例如,如果你使用 GitHub 或 GitLab),你可以使用类似的工作流程,而无需使用 UI可以使用与 UI 不同的类似工作流程。更多详情见指南。

  1. 创建模型卡片

    模型卡片是随模型一起提供的文件,主要包含关于模型的实用信息。模型卡片对于发现、可重现性和共享模型来说至关重要!你可以在任何模型仓库中找到名为README.md 的模型卡片。我们强烈建议在其中添加一个代码片段,展示如何加载和使用模型。

    除了以上内容外,模型卡片还可以包含顶部的有用元数据。UI 提供了一些工具来帮助你创建。我们强烈建议你指定许可证管道标签(用于指定模型的任务,如文本到图像)。这两者是发现和使用模型的关键。

a1bffd2a92c61adcfcc599a2f84495ac.png

还有其他值得添加的内容。你可以在这里了解更多。比如:

  • language 语言:模型支持的语言列表

  • tags 标签:帮助发现模型标签

  • datasets 数据集:用于训练模型的数据集

  • base_model 基础模型:如果是微调模型的话使用的基础模型是什么?

  • library_name 库名称:用来加载模型的库

我们建议在模型卡片内容中添加相关的 arXiv 论文链接。HF 会自动将两者链接在一起。

你可以在其官方文档中了解更多关于模型卡片的信息。

  1. [可选] 添加 TensorBoard 跟踪

    TensorBoard 是一个提供用于可视化指标工具的工具。如果你将 TensorBoard 跟踪推送到 Hub,则会自动显示出一个 TensorBoard 实例的” Metrics”选项卡。请在此处相关信息这里信息。

9a08c5cabe950ae70f2953cba71db9c2.png
  1. [可选] 编程访问

    如果你想在代码库或在线演示中从 Hugging Face 下载模型,可以使用 huggingface_hub Python 库进行编程访问。例如,以下代码将下载指定文件。

from huggingface_hub import hf_hub_download
   hf_hub_download(repo_id="lysandre/arxiv-nlp", filename="config.json")

以下代码将下载库中的所有文件:

from huggingface_hub import snapshot_download
   snapshot_download(repo_id="lysandre/arxiv-nlp", revision="refs/pr/1")

创建在线演示

Hugging Face Hub 为在线演示提供托管、发现和社交功能 - 称为 Spaces。Spaces 可以轻松创建和部署ML驱动的在线演示,只需几分钟即可完成。

为什么要做在线演示?

创建在线演示可以让你的研究或项目成果更易于理解和使用,有助于其推广。任何拥有浏览器的人都可以体验你的研究成果,甚至可以让成果一日爆红!

在线演示的展现形式

你可以自由选择在线演示的展现形式!我们在这里提供一些热门在线演示作为参考并分享如何创建在线演示 Spaces。

Stability 的 Stable Diffusion(文本到图像)

e2b21493623a51bc0ccaf4b0abfbb231.png

Meta 的 MusicGen(文本到音乐生成)

ebef576f3a17c264d83e6cea40214983.png

jbilcke 的 AI Comic Factory(漫画生成)

70ca7e10a90c1b3c8501c7ce884365f6.png

注意:Spaces 在 CPU 上运行时是免费的。如果需要使用 GPU 运行,你可以申请社区资助(在 设置 选项卡中)或购买 T4、A10G 及 A100。

  1. 在 https://huggingface.co/new-space 创建一个仓库,可以在你的账户或在组织名下创建。

    Spaces 可以使用开源 Python 库(例如:Gradio或Streamlit)创建,也可以使用 Docker 或静态 HTML 页面。我们建议使用 Gradio 进行快速原型制作,当然也可以使用你喜欢的其他工具!

1449eaf4553d8afa8d550f455196aa08.png
  1. 创建应用程序文件

    假设你正在创建一个 Gradio 演示。请随意查阅 Gradio Spaces 文档。可以在仓库的”文件”选项卡点击”上传文件”或”创建新文件”。主 Python 脚本应命名为 app.py

6b135184cd42e1acf5cccd6ff109bf09.png
  1. 编写你的应用代码

如果你想要加载模型或数据集,你可以使用huggingface_hub Python库

import gradio as gr

def greet(name):
    return f"Hello {name}"}

demo = gr.Interface(
    fn=greet,
    inputs=["text"],
    outputs=["text"],
)

demo.launch()
  1. 体验应用!

    你的应用已经创建成功!建议在创建之后操作即使体验以保证其运行顺利。

661f881ed3e3eb09448ea83fcace3d8e.png

注意

Hugging Face 使用 Git 作为数据和代码的存储库。如果你熟悉 Git(例如,如果你使用 GitHub 或 GitLab),你可以使用类似的工作流程,而无需使用 UI可以使用与 UI 不同的类似工作流程。更多详情见指南。

Spaces 常见问题汇总

  1. 我可以使用哪些模型库?

    你可以使用任何你喜欢的库,可以在 requirements.txt 文件中定义你的依赖项。

  2. 如何加载模型?

    如果你想从 Hub 下载模型到你的Spaces,可以使用 huggingface_hub Python 库进行编程访问。例如,以下代码将下载某个指定文件。

from huggingface_hub import hf_hub_download
   hf_hub_download(repo_id="lysandre/arxiv-nlp", filename="config.json")

而以下代码将下载仓库中的所有文件。

from huggingface_hub import snapshot_download
   snapshot_download(repo_id="lysandre/arxiv-nlp", revision="refs/pr/1")
  1. 我可以用 Gradio 做什么?

    随时查看 Gradio 文档和指南。Gradio 提供了一个简单的 API 来创建在线演示,并可以让你自由定义在线演示的展现方式。

    例如添加音频、文本、带注释的图像、聊天机器人、代码、文件、图像画廊、3D 对象、视频等组件,甚至可以创建符合你需求的组件。

  2. 热门 Spaces 制作小贴士?

  • 简单的演示更受欢迎。

  • 有标题、描述和简要说明演示的内容。

  • 有模型或论文的链接。

  • 添加偏见和内容认可(参见 SD 演示 作为示例)。

推广宣传:

在公布论文、模型/数据集、GitHub 仓库和在线演示之后,就是要确保你的研究能尽快被社区熟知!这里有一些方法可以帮助提高在社区中推广和宣传你的研究成果。

【加分项】Collections

你可以为项目成果(包括模型、数据集、演示、论文)在 Hub 上创建一个合集,你创建的合集会直接显示在个人账户中。更多详情请查看文档。

38664da68d08e499684a4d9e74f1b401.png

【加分项】Paper Space

通过GitHub Pages 或 Hugging Face Spaces,你可以将所有的项目成果和应用都集中在一个网页中。(例如:(https://nerfies.github.io/))如果你选择使用Spaces, 可以从 Nerfies/Paper Project 模板 中选择喜欢的模版,或者自创模版进行展示。

334f55a354d749f2e6dcb2a0f6650e5c.png

【加分项】Hugging Face Paper 页面

在 HF 论文页面 ,你可以发现和探索与研究论文相关的所有成果(包括:模型,数据集和在线演示demo)。你还可以在喜欢的论文页面和作者或社区一起来进行讨论。论文在 arXiv 上发表之后,你可以在 HF 上进行索引作为作者认领论文,认领之后论文将直接链接到你的账户并在账户中展示。更多详情请查看 文档。

fc5e4d1a45a63a3ec182badf4854fdae.png

推广

如果你已经完成了以上的步骤,那么恭喜你已经成功发布了你的项目成果!接下来也是最重要的一个环节是要进行推广。使用推特或 Reddit 等社交平台来撰写博客文章,或进行发布公告来为研究的推广助力。

建议你与其他研究人员或开源贡献者等合作伙伴联合发布,这样可以有效的扩大推广受众覆盖率。在开始推广之后,你还需要和与社区进行互动!最好的推广不仅仅是宣传你的项目成果,也需要和你项目的受众建立良好的互动关系。关系和与你的受众互动。

如何使用这份文档?

我们建议复制这份文档,并使用下面的步骤来跟踪进度。每步的操作时间基本只需 1 分钟。,它们会在 你决定做什么时 指导你,并且可以快速完成!下面有文档解释如何做不同的项目。

  1. 发布论文

  • 准备好论文并进行排版

  • 在 ArXiv 上发布

  • 在 HF 上索引论文

  1. 发布代码库

  2. 发布数据集

  • 选择许可证

  • 将数据集上传到 Hub(例如 HF、Kaggle、Zenodo)

  • 创建数据集卡片

    • 添加元数据(任务、许可证、语言等)

    • 添加其他成果的链接(arxiv 链接等)

    • 编写卡片内容

  1. 发布模型

  • 选择许可证

  • 将模型上传到 Hub

  • 创建模型卡片

    • 添加元数据(任务、许可证、数据集等)

    • 添加其他成果的链接(arxiv 链接)

    • 编写卡片内容

    • 添加展示如何使用模型的代码片段

  1. 构建演示

  • 编写 Colab 或脚本

  • 创建在线演示 Space

  1. 准备发布

  • 确保你的项目成果之间相互关联

  • 创建论文页面

  • 构建成果合集

  • 推广宣传

  1. 庆祝🎉

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1393063.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tinyxml2

使用tinyxml2,得知道一些xml基础 xml tutorial--菜鸟 tinyxml2类对象 链接 结构 XMLNode 什么是节点 节点:元素、声明、文本、注释等。 XMLDocument xml文档(文件)对象。 作用: 加载xml文件, tinyxml2作用 1,…

数据守护盾牌:敏感数据扫描与脱敏,让安全合规无忧

前言 在信息时代,数据已经成为企业和组织的核心资产,其价值与日俱增。然而,随着数据使用的普及和复杂度的提升,数据安全与合规问题也变得越来越突出。敏感数据的保护显得尤为重要,因为这些数据一旦泄露或被不当使用&a…

Servlet系列两种创建方式

一、使用web.xml的方式配置(Servlet2.5之前使用) 在早期版本的Java EE中,可以使用XML配置文件来定义Servlet。在web.xml文件中,可以定义Servlet的名称、类名、初始化参数等。然后,在Java代码中实现Servlet接口&#x…

【机器学习300问】9、梯度下降是用来干嘛的?

当你和我一样对自己问出这个问题后,分析一下!其实我首先得知道梯度下降是什么,也就它的定义。其次我得了解它具体用在什么地方,也就是使用场景。最后才是这个问题,梯度下降有什么用?怎么用? 所以…

muduo网络库剖析——监听者EpollPoller类

muduo网络库剖析——监听者EpollPoller类 前情从muduo到my_muduo 概要epoll原理解析epoll提供的接口epoll的触发模式epoll实现多路复用 框架与细节成员函数使用方法 源码结尾 前情 从muduo到my_muduo 作为一个宏大的、功能健全的muduo库,考虑的肯定是众多情况是否…

低代码配置-属性配置面板设计

模块设计 tab项切换 组件基础属性组件数据属性组件事件属性表单属性 模块输出函数设计 tab切换函数 列表表单属性 数据来源: 调用接口时一次赋予,无需使用selectItem,如需使用,归入基础属性列表标题是否展示筛选区域 示例&am…

前端框架前置学习Webpack(1) 常用webpack配置

什么是Webpack? 定义 本质上,Webpack是用于现代JavaScript应用程序的静态模块打包工具.当webpack处理应用程序时,它会在内部从一个或多个入口点构建一个依赖图(dependency graph),然后将你项目中所需的每一个模块组合成一个或多个bundles,它们均为静态资源,用于展示你的内容.…

数学建模--论文

内容来自数学建模BOOM:【快速入门】北海:数模建模基础MATLAB入门论文写作数学模型与算法(推荐数模美赛国赛小白零基础必看教程)_哔哩哔哩_bilibili 目录 一、论文整体模版 1.整体框架 2.示例 二、标题 1.标题主题事项 三、摘要 1.摘要三要素&am…

LaTeX 多栏文档 Multiple columns如何插入图片并修改样式

在今天写报告的时候用到了 latex 的多栏列表,插入图片的时候感觉很无助 如果不喜欢让Latex自动安排图片位置,可以使用float包,然后可以使用\begin{figure}[H]。 记得提前导入这个包 \usepackage{float} 为了让我的图片的caption居中&#xf…

Go 语言中高效切片拼接和 GO 1.22 提供的新方法

Table Contents 切片拼接的必要性基本拼接方法及其局限性使用 append 函数高效拼接的策略控制容量和避免副作用利用 Go 1.22 的新特性切片动态扩容的深入理解内存重新分配与数据迁移性能优化策略结论在 Go 语言中,切片拼接是一项常见的操作,但如果处理不当,可能会导致性能问…

Verilog刷题笔记15

题目: An adder-subtractor can be built from an adder by optionally negating one of the inputs, which is equivalent to inverting the input then adding 1. The net result is a circuit that can do two operations: (a b 0) and (a ~b 1). See Wikipe…

[go语言]输入输出

目录 知识结构 输入 1.Scan ​编辑 2.Scanf 3.Scanln 4.os.Stdin --标准输入,从键盘输入 输出 1.Print 2.Printf 3.Println 知识结构 输入 为了展示集中输入的区别,将直接进行代码演示。 三者区别的结论:Scanf格式化输入&#x…

中科院罗小舟团队提出 UniKP 框架,大模型 + 机器学习高精度预测酶动力学参数

作者:李宝珠 编辑:三羊 中国科学院深圳先进技术研究院罗小舟团队提出了,基于酶动力学参数预测框架 (UniKP),实现多种不同的酶动力学参数的预测。 众所周知,生物体内的新陈代谢是通过各种各样的化学反应来实现的。这…

SpringBoot 统计API接口用时该使用过滤器还是拦截器?

统计请求的处理时间(用时)既可以使用 Servlet 过滤器(Filter),也可以使用 Spring 拦截器(Interceptor)。两者都可以在请求处理前后插入自定义逻辑,从而实现对请求响应时间的统计。 …

Modelsim SE 10.5安装教程

ModelSim 是一种功能强大的硬件描述语言 (HDL,Hardware Description Language) 仿真和验证工具,可以单独仿真,也可以联合Quartus/Vivado等软件联合仿真,仿真速度快,广泛应用于数字电路设计和验证领域。 大学老师爱教VH…

JavaWeb后端——Maven

maven主要服务于基于Java平台的项目构建、依赖管理和项目信息管理 maven项目对象模型简称POM, maven解决问题: 1. 添加第三方jar包,maven将 jar 包放在本地仓库中统一管理,使用时用坐标的方式引用即可 2. 解决 jar 包之间的依…

计算机网络-计算机网络的概念 功能 发展阶段 组成 分类

文章目录 计算机网络的概念 功能 发展阶段总览计算机网络的概念计算机网络的功能计算机网络的发展计算机网络的发展-第一阶段计算机网络的发展-第二阶段-第三阶段计算机网络的发展-第三阶段-多层次ISP结构 小结 计算机网络的组成与分类计算机网络的组成计算机网络的分类小结 计…

springBoot 添加自定义类库包

一、新建SpringBoot Web 二、添加类库包 com.saas.pdf 删除掉多余的类,新建类:PdfUtil.java package com.saas.pdf;public class PdfUtil {public static void Save(String filePath) {System.out.println("保存成功!");} }三、…

阿里云服务器4核8G配置收费标准及新老用户优惠价格整理

阿里云服务器4核8g配置云服务器u1价格是955.58元一年,4核8G配置还可以选择ECS计算型c7实例、计算型c8i实例、计算平衡增强型c6e、ECS经济型e实例、AMD计算型c8a等机型等ECS实例规格,规格不同性能不同,价格也不同,阿里云服务器网al…

十二、Qt 操作PDF文件(2)

一、在《十、Qt 操作PDF文件-CSDN博客》中我们用Poppler类库打开了PDF文件,并显示到窗体上,但只能显示一页,功能还没完善,在本章节中,加入了: 通过选择框选择PDF文件并打开,默认打开第一页。通…