一个包含辅助工具的软件包,用于使用huggingface_hub构建Hugging Face API推理的Docker应用程序
项目描述
这个仓库允许第三方库与huggingface_hub集成,以创建自己的Docker,使得Hub上的小部件可以像transformers
一样工作。
目前,运行API的硬件将由Hugging Face提供。
文件夹docker_images/common
旨在成为所有想要集成的全新库的起点。
从新的库添加新的容器。
-
将
docker_images/common
文件夹复制到您的库名称docker_images/example
。 -
编辑
docker_images/example/requirements.txt
docker_images/example/app/main.py
docker_images/example/app/pipelines/{task_name}.py
以实现所需的功能。所有所需的代码都带有
IMPLEMENT_THIS
标记。 -
删除
docker_images/example/app/pipelines/
中未使用的任何管道文件。docker_images/example/tests
中与已删除管道相关联的任何测试。- 从
docker_images/example/app/pipelines/__init__.py
中删除的任何管道导入。
-
请随意在需要的地方自定义您的库所需的所有内容。唯一的真正要求是,要尊重所有支持的任务中的HTTP端点,就像
common
文件夹一样。 -
编辑
example/tests/test_api.py
以添加TESTABLE_MODELS。 -
通过测试套件
pytest -sv --rootdir docker_images/example/ docker_images/example/
-
提交您的PR并享受!
全面实施
完成前7步就足够开始使用了,然而在过程中你可以预先考虑到一些可能的问题并及早进行修正。如果你自己不自信能够完成这些步骤,维护者会在过程中帮助你。
- 在Docker中测试你的创建物
./manage.py docker MY_MODEL
应该能在8000端口上工作并响应。curl -X POST -d "test" https://:8000
例如,如果管道处理简单的文本。
如果它不能直接工作,或者由于某些原因Docker运行缓慢,你可以使用本地环境(使用你的本地Python环境)进行测试:
./manage.py start MY_MODEL
- 测试你的Docker是否正确地使用了缓存。
当你使用相同的model_id进行后续的Docker启动时,Docker应该启动得非常快,并且不会重新下载整个模型文件。如果你看到model/repo被反复下载,这意味着缓存没有被正确使用。你可以编辑docker_images/{框架}/Dockerfile
并添加一个环境变量(默认假设为HUGGINGFACE_HUB_CACHE
),或者直接在你的代码中添加环境变量,将模型文件放在/data
文件夹中。
- 添加一个Docker测试。
编辑tests/test_dockers.py
文件,添加一个新的测试,其中包含你的新框架(例如def test_{框架}(self):
)。作为一个基本,你应该在这个测试函数中每行有一个任务,并且使用在hub上的真实工作模型。这些测试相对较慢,但会自动检查你的API是否正确地回复了错误,并且缓存是否工作正常。要运行这些测试,你可以简单地做:
RUN_DOCKER_TESTS=1 pytest -sv tests/test_dockers.py::DockerImageTests::test_{framework}
修改api-inference-community/{routes,validation,...}.py
文件中的文件。
如果你在api-inference-community
包中遇到错误,或者想要更新它,开发过程会更加复杂。
- 首先,确保你需要修改这个包,每个框架都非常独立,所以如果你的代码可以通过独立运行来解决问题,那么首先考虑这种方法,因为它更简单。
- 如果你可以在不依赖于它的前提下只修改
api-inference-community
,这也是一个很好的选择。确保在PR中添加适当的测试。 - 最后,最好的方式是在本地使用
manage.py
命令进行开发 - 首先在
api-inference-community
中做必要的修改。 - 在你的环境中本地安装它,使用
pip install -e .
- 本地安装你的包依赖。
- 本地运行你的web服务器:
./manage.py start --framework example --task audio-source-separation --model-id MY_MODEL
- 当一切正常时,你将需要将你的PR分成两部分,1部分是
api-inference-community
部分。第二部分将是你包特定的修改,并且只有在api-inference-community
标签落地后才会合并。 - 这个工作流程仍在进行中,不要犹豫向维护者提问。
另一个类似的命令./manage.py docker --framework example --task audio-source-separation --model-id MY_MODEL
将启动服务器,但这次是在一个受保护、受控制的Docker环境中,确保行为将与API中的行为完全一致。
可用任务
- 自动语音识别:输入是一个文件,输出是文件中听到的单词的字典
- 文本生成:输入是文本,输出是生成的文本的字典
- 图像识别:输入是图像,输出是生成的文本的字典
- 问答:输入是问题和一些上下文,输出是包含必要信息以在上下文中找到问题答案的字典。
- 音频源分离:输入是一些音频,输出是n个音频文件,这些文件加起来等于原始音频,但包含单个声音源(例如扬声器或乐器)。
- 标记分类:输入是一些文本,输出是文本中提到的实体的列表。实体可以是任何引人注目的内容,如地点、组织、人物、时间等...
- 文本到语音:输入是一些文本,输出是读出文本的音频文件...
- 句子相似度:输入是一些句子和一个参考句子列表,以及相似度分数列表。
项目详情
哈希值 for api_inference_community-0.0.34-py3-none-any.whl
算法 | 哈希摘要 | |
---|---|---|
SHA256 | f81b5a2d9d5d65c5cac4394c36ab55c684c83e2595a8a60f60041e50f41f5add |
|
MD5 | 9fbfd8f520361c4d05e83b7bbcaf7f29 |
|
BLAKE2b-256 | 23aa26b9a50bd135ef3f9543aa73e084b92dba1eadbcb3445109f4ceebd06522 |