前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >GitHub Copilot 开源替代品 —— FauxPilot

GitHub Copilot 开源替代品 —— FauxPilot

作者头像
AlphaHinex
发布2024-04-08 12:46:00
3100
发布2024-04-08 12:46:00
举报
文章被收录于专栏:周拱壹卒
用 PaddleNLP 结合 CodeGen 实现离线 GitHub Copilot

FauxPilot 插件原本是对接 FauxPilot[1] Server 的,通过 FauxPilot Server 也可以实现 GitHub Copilot 服务的功能,并支持多显卡加载 CodeGen 模型,可解决单卡显存不足又想加载大模型的问题。

例如 FauxPilot 提供的 codegen-16B-multi-gptj 模型需要 32G 显存,你有两张 24G 显存的显卡,可以使用每张显卡 16G 左右的显存,成功加载 16B 模型。

最终效果

还是先展示一下最终的效果:

Prerequisite

FauxPilot 的环境需求可见 Prerequisites[2],包括:

  • Docker
  • docker compose >= 1.28[3]
  • NVIDIA GPU 算力 >= 6.0 和足够模型使用的显存
  • nvidia-docker[4]
  • curlzstd 命令行工具用来下载和解压模型文件

Nvidia container toolkit 的离线安装方式可参考 用 PaddleNLP 结合 CodeGen 实现离线 GitHub Copilot 一文的前置条件中相关内容。

FauxPilot Server 部署

如果是联网环境,可参照 How to set-up a FauxPilot server[5] 通过 setup.sh 下载模型并直接启动服务,或在完成配置后,使用 launch.sh 脚本启动服务。

FasterTransformer backend 和 Python backend 中推荐选择 FasterTransformer backend。

服务启动时,会通过 Docker Compose,按照 docker-compose.yaml[6] 的配置,以及 proxy.Dockerfile[7]triton.Dockerfile[8] 构建两个镜像:

  • fauxpilot-main-copilot_proxy:latest
  • fauxpilot-main-triton:latest

故在离线环境部署时,只需将在线环境构建好的上面两个镜像导出:

代码语言:javascript
复制
$ docker save > fauxpilot-triton.tar fauxpilot-main-triton
$ docker save > fauxpilot-proxy.tar fauxpilot-main-copilot_proxy

再在离线环境导入:

代码语言:javascript
复制
$ docker load < fauxpilot-triton.tar
$ docker load < fauxpilot-proxy.tar

然后将下载好的模型文件目录、docker-compose.yaml 和执行 setup.sh 后生成的 .env 文件传入离线环境:

代码语言:javascript
复制
$ tree -a
├── .env
├── docker-compose.yaml
└── models
    └── codegen-16B-multi-2gpu
        └── fastertransformer
            ├── 1
            │   └── 2-gpu
            │       ├── config.ini
            │       ├── model.final_layernorm.bias.bin
            |       ├── ...
            │       └── model.wte.bin
            └── config.pbtxt

根据实际情况调整 .env 文件中的 MODEL_DIRHF_CACHE_DIR 为离线环境路径,并将 docker-compose.yamlbuild 部分改为直接使用镜像:

代码语言:javascript
复制
version: '3.3'
services:
  triton:
    image: fauxpilot-main-triton:latest
    command: bash -c "CUDA_VISIBLE_DEVICES=${GPUS} mpirun -n 1 --allow-run-as-root /opt/tritonserver/bin/tritonserver --model-repository=/model"
    shm_size: '2gb'
    volumes:
      - ${MODEL_DIR}:/model
      - ${HF_CACHE_DIR}:/root/.cache/huggingface
    ports:
      - "8000:8000"
      - "${TRITON_PORT}:8001"
      - "8002:8002"
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
  copilot_proxy:
    # For dockerhub version
    image: fauxpilot-main-copilot_proxy:latest
    command: uvicorn app:app --host 0.0.0.0 --port 5000
    env_file:
      # Automatically created via ./setup.sh
      - .env
    ports:
      - "${API_EXTERNAL_PORT}:5000"

之后直接通过 Docker Compose 启动即可:

代码语言:javascript
复制
$ docker compose up

客户端

FauxPilot Server 启动成功后,可按 用 PaddleNLP 结合 CodeGen 实现离线 GitHub CopilotFauxpilot VSCode Plugin 部分配置 VSCode 插件使用,也可直接通过 RESTful API 试用:

代码语言:javascript
复制
$ curl -s -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"prompt":"def hello","max_tokens":100,"temperature":0.1,"stop":["\n\n"]}' http://localhost:5000/v1/engines/codegen/completions
{"id": "cmpl-R6DqtyLigNJVJzt4F617KoM3EjB9M", "model": "codegen", "object": "text_completion", "created": 1686646299, "choices": [{"text": "(self):\n        return \"Hello World\"", "index": 0, "finish_reason": "stop", "logprobs": null}], "usage": {"completion_tokens": 11, "prompt_tokens": 2, "total_tokens": 13}}

接口结构参照 https://platform.openai.com/docs/api-reference/completions/create 。

请求体结构:

代码语言:javascript
复制
{
  "model": "text-davinci-003",
  "prompt": "Say this is a test",
  "max_tokens": 7,
  "temperature": 0,
  "top_p": 1,
  "n": 1,
  "stream": false,
  "logprobs": null,
  "stop": "\n"
}

响应体结构:

代码语言:javascript
复制
{
  "id": "cmpl-uqkvlQyYK7bGYrRHQ0eXlWi7",
  "object": "text_completion",
  "created": 1589478378,
  "model": "text-davinci-003",
  "choices": [
    {
      "text": "\n\nThis is indeed a test",
      "index": 0,
      "logprobs": null,
      "finish_reason": "length"
    }
  ],
  "usage": {
    "prompt_tokens": 5,
    "completion_tokens": 7,
    "total_tokens": 12
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-06-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 周拱壹卒 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 最终效果
  • Prerequisite
  • FauxPilot Server 部署
  • 客户端
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档