当前位置:   article > 正文

FastChat构建API_fastchat api

fastchat api

 构建conda环境

【Conda】超详细的linux-conda环境安装教程_linux安装conda-CSDN博客

FastChat是一个用于训练、部署和评估基于大型语言模型的聊天机器人的开放平台

  • 最先进模型(例如,Vicuna、MT-Bench)的训练和评估代码。
  • 具有 Web UI 和兼容 OpenAI 的 RESTful API 的分布式多模型服务系统

支持以下大模型:FastChat/docs/model_support.md at main · lm-sys/FastChat · GitHub

本任务记录如何在docker环境下,使用FastChat为LLM构建与OpenAI兼容的RESTful API

docker的基本使用方法:
  1. # 查看镜像
  2. docker image ls
Docker 启动一个名为 img1 的容器,分配所有 GPU 资源,映射三个后面用到的端口,挂载一个主机目录,并启动一个交互式 Bash shell 以便于在容器内进行操作。
  1. # 启动容器并进行端口映射
  2.   sudo docker run --gpus all -p 21002:21001 -p 21003:21002 -p 21004:21003 -v /home/before_path:/home/after_path --name container_name -it img1:latest /bin/bash 
  1. docker run:

    • 启动一个新的 Docker 容器。
  2. -p 21002:21001 -p 21003:21002 -p 21004:21003:  端口映射,因为主机21001端口已占用,所以将容器的21001~21003分别映射至主机21002~21004

  3. -v /home/before_path:/home/after_path: 挂载主机目录到容器内部:将主机的 /home/before_path 挂载到容器的 /home/after_path

  4. --name container:

    • 为容器指定一个名称 container_name。这样可以通过名称方便地管理和访问容器。
  5. -it:

    • -i:交互模式,保持标准输入打开。
    • -t:分配一个伪终端。这两者结合使用,允许你进入容器并进行交互操作。
  6. img1:latest:

    • 指定要运行的 Docker 镜像,img1 是镜像名称,latest 是镜像的标签,表示使用该镜像的最新版本。
  7. /bin/bash:

    • 容器启动后执行的命令。在这种情况下,它启动一个 Bash shell,允许你在容器内进行交互式操作。
退出容器快捷键:Ctrl + p + q
重新启动容器
docker restart container_name
查看运行的容器
docker ps
查看所有的容器
docker ps -a
进入容器
docker exec -it container_name /bin/bash

FastChat构建API

FastChat官方文档:https://github.com/lm-sys/FastChat/blob/main/docs/openai_api.md

安装FastChat:

pip install "fschat[model_worker,webui]"

创建三个终端,分别执行以下命令:

1.启动controller

python3 -m fastchat.serve.controller --host 0.0.0.0 --port 21001

2. 启动model worker

CUDA_VISIBLE_DEVICES="0" python3 -m fastchat.serve.model_worker --model-path weights/model_weights --host 0.0.0.0 --port 21002 --worker-address "http://0.0.0.0:21002"

3.启动RESTful API server

python3 -m fastchat.serve.openai_api_server --host 0.0.0.0 --port 21003 --controller-address http://0.0.0.0:21001 

注意:1. 此处本机只能用0.0.0.0,使用127.0.0.1会报错

           2. control必须使用默认端口21001,否则启动model_worker会报错

           3. 必须docker开放端口21003,即必须将21003与主机端口映射,否则无法访问

cURL:观察api输出

查看模型信息

curl http://xxx.xxx.xx.xxx:21004/v1/models

模型对话

curl http://xx.xxx.xx.xxx:21004/v1/chat/completions -H "Content-Type: application/json" -d '{"model": "model_weights","messages": [{"role": "user", "content": "Hello! What is your name?"}]}'
测试文件
  1. import json
  2. import time
  3. import urllib.request
  4. import sys
  5. import requests
  6. def test_api_server(input_text):
  7. header = {'Content-Type': 'application/json'}
  8. data = {
  9. "messages": [{"role": "system", "content": ""}, {"role": "user", "content": input_text}],
  10. "temperature": 0.3,
  11. "top_p" : 0.95,
  12. "max_tokens": 512,
  13. "model": "model_weights",
  14. "stream" : False,
  15. "n" : 1,
  16. "best_of": 1,
  17. "presence_penalty": 1.2,
  18. "frequency_penalty": 0.2,
  19. "top_k": 50,
  20. "use_beam_search": False,
  21. "stop": [],
  22. "ignore_eos" :False,
  23. "logprobs": None
  24. }
  25. response = requests.post(
  26. url='http://xx.xxx.xx.xxx:21004/v1/chat/completions', # 外机运行
  27. # url='http://0.0.0.0:21003/v1/chat/completions', # 本机运行
  28. headers=header,
  29. data=json.dumps(data).encode('utf-8')
  30. )
  31. result = None
  32. try:
  33. result = json.loads(response.content)
  34. print(json.dumps(data, ensure_ascii=False, indent=2))
  35. print(json.dumps(result, ensure_ascii=False, indent=2))
  36. except Exception as e:
  37. print(e)
  38. return result
  39. if __name__ == "__main__":
  40. test_api_server("Hello,what is your name?")

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Li_阴宅/article/detail/787387
推荐阅读
相关标签
  

闽ICP备14008679号