JARVIS
JARVIS 的使命是探索通用人工智能(AGI),并将最前沿的研究成果带给整个社区。
最新动态
- [2024.01.15] 我们发布了 Easytool,简化了工具的使用。
- 代码和数据集可在 EasyTool 获取。
- 论文可在 EasyTool: Enhancing LLM-based Agents with Concise Tool Instruction 获取。
- [2023.11.30] 我们发布了 TaskBench,用于评估大语言模型的任务自动化能力。
- 代码和数据集可在 TaskBench 获取。
- 论文可在 TaskBench: Benchmarking Large Language Models for Task Automation 获取。
- [2023.07.28] 我们正在规划评估和项目重建的过程中。我们将在不久的将来发布 Jarvis 的新版本。
- [2023.07.24] 我们发布了 Jarvis 的轻量版 Langchain。详见 此处。
- [2023.04.16] Jarvis 现已支持 Azure 平台上的 OpenAI 服务和 GPT-4 模型。
- [2023.04.06] 我们添加了 Gradio 演示,并在
server
模式下为/tasks
和/results
构建了 Web API。- Gradio 演示现已托管在 Hugging Face Space 上。(使用
inference_mode=hybrid
和local_deployment=standard
构建) - Web API
/tasks
和/results
提供了第 1 阶段
的任务规划中间结果和第 1-3 阶段
的模型选择及执行结果。详见 此处。
- Gradio 演示现已托管在 Hugging Face Space 上。(使用
- [2023.04.03] 我们添加了 CLI 模式,并提供了配置本地端点规模的参数。
- 您可以无需在本地部署模型,即可享受 Jarvis 的轻量体验。详见 此处。
- 只需运行
python awesome_chat.py --config configs/config.lite.yaml
即可体验。
- [2023.04.01] 我们更新了代码版本以进行构建。
概述
语言是 LLMs 连接众多 AI 模型来解决复杂 AI 任务的接口!
请参阅我们的论文:HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace,作者:Yongliang Shen, Kaitao Song, Xu Tan, Dongsheng Li, Weiming Lu 和 Yueting Zhuang(前两位作者贡献相同)
我们介绍了一个协作系统,该系统由 一个作为控制器的大语言模型(LLM) 和 众多作为协作执行者的专家模型(来自 HuggingFace Hub)组成。我们的系统工作流程包括四个阶段:
- 任务规划:使用 ChatGPT 分析用户的请求,理解其意图,并将其分解为可能可解的任务。
- 模型选择:为了完成规划的任务,ChatGPT 根据专家模型的描述,从 Hugging Face 中选择合适的模型。
- 任务执行:调用并执行每个选定的模型,并将结果返回给 ChatGPT。
- 响应生成:最后,使用 ChatGPT 整合所有模型的预测,并生成响应。
系统要求
默认配置(推荐)
对于 configs/config.default.yaml
:
- Ubuntu 16.04 LTS
- 显存 ≥ 24GB
- 内存 > 12GB(最小),16GB(标准),80GB(完整)
- 磁盘 > 284GB
- 42GB 用于
damo-vilab/text-to-video-ms-1.7b
- 126GB 用于
ControlNet
- 66GB 用于
stable-diffusion-v1-5
- 50GB 用于其他
- 42GB 用于
最低配置(Lite)
对于 configs/config.lite.yaml
:
- Ubuntu 16.04 LTS
- 无其他要求
配置 configs/config.lite.yaml
不需要下载和本地部署任何专家模型。然而,这意味着 Jarvis 只能运行在 HuggingFace 推理端点上稳定运行的模型。
快速开始
首先将 openai.key
和 huggingface.token
替换为 server/configs/config.default.yaml
中的 您的个人 OpenAI 密钥 和 您的 Hugging Face 令牌,或者将它们放入环境变量 OPENAI_API_KEY
和 HUGGINGFACE_ACCESS_TOKEN
中。然后运行以下命令:
服务器模式:
# 设置环境
cd server
conda create -n jarvis python=3.8
conda activate jarvis
conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia
pip install -r requirements.txt
# 下载模型。确保 `git-lfs` 已安装。
cd models
bash download.sh # 当 `inference_mode` 为 `local` 或 `hybrid` 时需要运行。
# 运行服务器
cd ..
python models_server.py --config configs/config.default.yaml # 当 `inference_mode` 为 `local` 或 `hybrid` 时需要运行
python awesome_chat.py --config configs/config.default.yaml --mode server # 针对 text-davinci-003
现在您可以通过 Web API 访问 Jarvis 的服务。
/hugginggpt
--methodPOST
,访问完整服务。/tasks
--methodPOST
,访问第 1 阶段的中间结果。/results
--methodPOST
,访问第 1-3 阶段的中间结果。
例如:
# 请求
curl --location 'http://localhost:8004/tasks' \
--header 'Content-Type: application/json' \
--data '{
"messages": [
{
"role": "user",
"content": "基于 /examples/d.jpg 的姿势和 /examples/e.jpg 的内容,请展示一个新图像"
}
]
}'
# 响应
[{"args":{"image":"/examples/d.jpg"},"dep":[-1],"id":0,"task":"openpose-control"},{"args":{"image":"/examples/e.jpg"},"dep":[-1],"id":1,"task":"image-to-text"},{"args":{"image":"<GENERATED>-0","text":"<GENERATED>-1"},"dep":[1,0],"id":2,"task":"openpose-text-to-image"}]
Web 模式:
我们提供了一个用户友好的网页。在服务器模式下启动 awesome_chat.py
后,您可以运行以下命令在浏览器中与 Jarvis 通信:
- 您需要首先安装
nodejs
和npm
。 - [重要] 如果您在另一台机器上运行 Web 客户端,您需要将
http://{服务器的局域网 IP}:{端口}/
设置为web/src/config/index.ts
的HUGGINGGPT_BASE_URL
。 - 如果您想使用视频生成功能,您需要手动编译
ffmpeg
并启用 H.264 编码。 - 您可以通过
双击
设置图标来切换到 ChatGPT!
cd web
npm install
npm run dev
# 可选:安装 ffmpeg
# 此命令需无错误执行。
LD_LIBRARY_PATH=/usr/local/lib /usr/local/bin/ffmpeg -i input.mp4 -vcodec libx264 output.mp4
Gradio 模式:
Gradio 演示现已托管在 Hugging Face Space 上。您也可以运行以下
欢迎使用Jarvis!这是一个由LLM作为控制器和众多专家模型作为协作执行器组成的协作系统。Jarvis可以规划任务、调度Hugging Face模型、根据您的请求生成友好的响应,并帮助您处理许多事情。请输入您的请求(输入“exit”退出)。
[用户]:给定图像集合A:/examples/a.jpg,B:/examples/b.jpg,C:/examples/c.jpg,请告诉我这些图片中有多少斑马?
[Jarvis]:根据您的请求,我使用了几个模型来处理您提供的图像。对于图像A:/examples/a.jpg,我使用图像到文本模型nlpconnect/vit-gpt2-image-captioning生成了文本“窗台上坐着一只向外看的猫”。然后,我使用目标检测模型facebook/detr-resnet-50生成了带有预测框的图像“/images/a3dc.jpg”,其中包含两个标签为“盆栽植物”和“猫”的对象。对于图像B:/examples/b.jpg,我使用图像到文本模型nlpconnect/vit-gpt2-image-captioning生成了文本“两只斑马站在干草地上”。然后,我使用目标检测模型facebook/detr-resnet-50生成了带有预测框的图像“/images/f5df.jpg”,其中包含三个标签为“斑马”的对象。对于图像C:/examples/c.jpg,我使用图像到文本模型nlpconnect/vit-gpt2-image-captioning生成了文本“一只斑马站在高草地上”。然后,我使用目标检测模型facebook/detr-resnet-50生成了带有预测框的图像“/images/69c7.jpg”,其中包含一个标签为“斑马”的对象。最后,我使用canny-control模型基于图像/examples/f.jpg生成了图像“/images/7e18.png”。因此,这些图片中共有四只斑马。我还可以帮助您什么?
[用户]:请回答句子中的所有命名实体:钢铁侠是出现在美国漫画书中由漫威漫画出版的超级英雄。该角色由作家和编辑斯坦·李共同创作,由编剧拉里·利伯开发,并由艺术家唐·赫克和杰克·柯比设计。
[Jarvis]:好的,我理解您的请求。根据模型的推理结果,我将逐步回答您的请求。首先,我使用token-classification模型dslim/bert-base-NER识别句子中的命名实体。推理结果是命名实体为钢铁侠、斯坦·李、拉里·利伯、唐·赫克和杰克·柯比。然后,我使用问答模型deepset/roberta-base-squad2来回答您的请求。推理结果是由于上下文不能为空,所以没有输出。因此,我无法完成。我希望这回答了您的请求。我还可以帮助您什么?
[用户]:请根据/examples/f.jpg生成一张canny图像。
[Jarvis]:好的。我已经根据/examples/f.jpg生成了一张canny图像。为此,我首先使用图像到文本模型nlpconnect/vit-gpt2-image-captioning生成了图像的文本描述,即“一群长颈鹿和斑马在草地上吃草”。然后我使用canny-control模型生成了原始图像的canny图像,存储在路径“/images/1ea2.png”中。最后,我使用canny-text-to-image模型lllyasviel/sd-controlnet-canny根据文本描述和canny图像生成了canny图像,存储在路径“/images/ba66.png”中。您还需要什么?
配置
服务器端配置文件是server/configs/config.default.yaml
,部分参数如下所示:
model
: LLM,目前支持text-davinci-003
。我们正在努力集成更多的开源LLM。inference_mode
: 推理端点模式local
: 仅使用本地推理端点huggingface
: 仅使用Hugging Face推理端点 (不使用本地推理端点)hybrid
: 同时使用local
和huggingface
local_deployment
: 本地部署模型的规模,在local
或hybrid
推理模式下工作:minimal
(RAM>12GB,仅支持ControlNet)standard
(RAM>16GB,支持ControlNet + 标准管道)full
(RAM>42GB,支持所有注册模型)
在个人笔记本电脑上,我们建议配置为inference_mode: hybrid
和local_deployment: minimal
。但在此设置下可用的模型可能有限,因为远程Hugging Face推理端点不稳定。
NVIDIA Jetson嵌入式设备支持
包含一个Dockerfile,提供对NVIDIA Jetson嵌入式设备的实验性支持。此镜像提供了加速的ffmpeg、pytorch、torchaudio和torchvision依赖项。要构建Docker镜像,请确保默认的docker runtime设置为“nvidia”。预构建的镜像可在https://hub.docker.com/r/toolboc/nv-jarvis获取。
# 构建docker镜像
docker build --pull --rm -f "Dockerfile.jetson" -t toolboc/nv-jarvis:r35.2.1
由于内存要求,JARVIS需要在Jetson AGX Orin系列设备(建议使用64G板载RAM设备)上运行,配置选项设置为:
inference_mode: local
local_deployment: standard
建议通过将主机的卷挂载到容器来提供模型和配置,如下所示。也可以取消注释Dockerfile中的“# 下载本地模型”部分,以构建包含模型的容器。
在Jetson Orin AGX上启动模型服务器、awesomechat和Web应用程序
# 运行容器,该容器将自动启动模型服务器
docker run --name jarvis --net=host --gpus all -v ~/jarvis/configs:/app/server/configs -v ~/src/JARVIS/server/models:/app/server/models toolboc/nv-jarvis:r35.2.1
#(等待模型服务器完成初始化)
# 启动awesome_chat.py
docker exec jarvis python3 awesome_chat.py --config configs/config.default.yaml --mode server
# 启动Web应用程序(应用程序将可在http://localhost:9999访问)
docker exec jarvis npm run dev --prefix=/app/web
截图
引用
如果您发现此工作对您的方法有用,您可以按以下方式引用论文:
@inproceedings{shen2023hugginggpt,
author = {Shen, Yongliang and Song, Kaitao and Tan, Xu and Li, Dongsheng and Lu, Weiming and Zhuang, Yueting},
booktitle = {Advances in Neural Information Processing Systems},
title = {HuggingGPT: Solving AI Tasks with ChatGPT and its Friends in HuggingFace},
year = {2023}
}
@article{shen2023taskbench,
title = {TaskBench: Benchmarking Large Language Models for Task Automation},
author = {Shen, Yongliang and Song, Kaitao and Tan, Xu and Zhang, Wenqi and Ren, Kan and Yuan, Siyu and Lu, Weiming and Li, Dongsheng and Zhuang, Yueting},
journal = {arXiv preprint arXiv:2311.18760},
year = {2023}
}
@article{yuan2024easytool,
title = {EASYTOOL: Enhancing LLM-based Agents with Concise Tool Instruction},
author = {Siyu Yuan and Kaitao Song and Jiangjie Chen and Xu Tan and Yongliang Shen and Ren Kan and Dongsheng Li and Deqing Yang},
journal = {arXiv preprint arXiv:2401.06201},
year = {2024}
}