ChatGLM3在Docker环境部署

2 篇文章 0 订阅
1 篇文章 0 订阅

ChatGLM3 docker部署

1. 下载项目到本地

git clone https://github.com/THUDM/ChatGLM3
cd ChatGLM3

这目录ChatGLM3下应该还需要包含chatglm3-6b-32k HuggingFace 或者 ModelScope ,需要手动下载。

2.制作Docker镜像

1)配置基础的Dockerfile:
#基于的基础镜像
FROM python:3.11.6
# 设置工作目录
WORKDIR /LLM
# 拷贝应用程序文件到容器中
COPY ./chatglm3-6b-32k/ /models/
COPY ./ChatGLM3/ /LLM/
# 安装支持
RUN pip install  -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
RUN pip install torch torchvision torchaudio -i https://pypi.tuna.tsinghua.edu.cn/simple
2)打包生成镜像
docker build -t dmx:easy .

3.启动容器

 docker run --restart=always -itd --name dmxApp3 -p 8000:8000 -w /LLM --gpus device=2 dmx:easy python LLM_Server.py

4.查看运行日志

docker logs -t dmxApp3

在这里插入图片描述

5. LLM_Server.py

from fastapi import FastAPI, Request
from fastapi.middleware.cors import CORSMiddleware
from transformers import AutoTokenizer, AutoModel
from utils import load_model_on_gpus
import uvicorn, json, datetime
import os

import torch


DEVICE = "cuda"
DEVICE_ID = "0"
CUDA_DEVICE = f"{DEVICE}:{DEVICE_ID}" if DEVICE_ID else DEVICE


def torch_gc():
    if torch.cuda.is_available():
        with torch.cuda.device(CUDA_DEVICE):
            torch.cuda.empty_cache()
            torch.cuda.ipc_collect()


app = FastAPI()  # 创建API实例
app.add_middleware(
    CORSMiddleware,
    # 允许跨域的源列表,例如 ["http://www.example.org"] 等等,["*"] 表示允许任何源
    allow_origins=["*"],
    # 跨域请求是否支持 cookie,默认是 False,如果为 True,allow_origins 必须为具体的源,不可以是 ["*"]
    allow_credentials=False,
    # 允许跨域请求的 HTTP 方法列表,默认是 ["GET"]
    allow_methods=["*"],
    # 允许跨域请求的 HTTP 请求头列表,默认是 [],可以使用 ["*"] 表示允许所有的请求头
    # 当然 Accept、Accept-Language、Content-Language 以及 Content-Type 总之被允许的
    allow_headers=["*"],
    # 可以被浏览器访问的响应头, 默认是 [],一般很少指定
    # expose_headers=["*"]
    # 设定浏览器缓存 CORS 响应的最长时间,单位是秒。默认为 600,一般也很少指定
    # max_age=1000
)


@app.post("/")
async def create_item(request: Request):
    global model, tokenizer
    json_post_raw = await request.json()
    json_post = json.dumps(json_post_raw)
    json_post_list = json.loads(json_post)
    prompt = json_post_list.get('prompt')
    history = json_post_list.get('history')
    max_length = json_post_list.get('max_length')
    top_p = json_post_list.get('top_p')
    temperature = json_post_list.get('temperature')
    response, history = model.chat(tokenizer,
                                   prompt,
                                   history=history,
                                   max_length=max_length if max_length else 32760,
                                   top_p=top_p if top_p else 0.7,
                                   #top_p=top_p if top_p else 0.1,
                                   temperature=temperature if temperature else 0.95)
                                   #temperature=temperature if temperature else 0.1)

    now = datetime.datetime.now()
    time = now.strftime("%Y-%m-%d %H:%M:%S")
    answer = {
        "response": response,
        "history": history,
        "status": 200,
        "time": time
    }
    log = "[" + time + "] " + '", prompt:"' + prompt + '", response:"' + repr(response) + '"'
    print(log)
    torch_gc()
    return answer

if __name__ == '__main__':
    modelPath="models/"
    tokenizer = AutoTokenizer.from_pretrained(modelPath, trust_remote_code=True)
    model = AutoModel.from_pretrained(modelPath, trust_remote_code=True).cuda()
    model.eval()
    uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)
  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
部署 ChatGPT 模型,你可以使用 Docker。下面是基本的步骤: 1. 首先,确保你已经安装了 Docker。你可以在 Docker 官方网站上找到适合你操作系统的安装指南。 2. 下载 ChatGPT 模型文件。你可以从 OpenAI 的 GitHub 仓库中获取预训练的模型文件。 3. 创建一个新的目录,并将模型文件放在该目录下。 4. 在该目录中创建一个名为 `Dockerfile` 的文件,并添加以下内容: ```dockerfile FROM tensorflow/tensorflow:2.3.1 WORKDIR /app COPY . . CMD ["python", "server.py"] ``` 这个 `Dockerfile` 使用 TensorFlow 的基础镜像,并将当前目录下的所有文件复制到容器的 `/app` 目录中。然后,它指定运行 `server.py` 脚本作为容器的入口点。 5. 在同样的目录中创建一个名为 `server.py` 的文件,并添加以下内容: ```python from transformers import GPT2LMHeadModel, GPT2Tokenizer from flask import Flask, request, jsonify app = Flask(__name__) tokenizer = GPT2Tokenizer.from_pretrained("gpt2") model = GPT2LMHeadModel.from_pretrained("gpt2") @app.route("/generate", methods=["POST"]) def generate_text(): data = request.get_json() prompt = data["prompt"] input_ids = tokenizer.encode(prompt, return_tensors="pt") output = model.generate(input_ids, max_length=100, num_return_sequences=1) generated_text = tokenizer.decode(output[0], skip_special_tokens=True) return jsonify({"text": generated_text}) if __name__ == "__main__": app.run(host="0.0.0.0", port=5000) ``` 这个 `server.py` 脚本使用 Hugging Face 的 Transformers 库来加载模型和 tokenizer。它创建了一个 Flask 服务器,监听 `/generate` 的 POST 请求,并生成对应的文本。 6. 构建 Docker 镜像。在命令行中,进入到包含 `Dockerfile` 和 `server.py` 的目录,并执行以下命令: ```bash docker build -t chatglm . ``` 这个命令会根据 `Dockerfile` 构建一个名为 `chatglm` 的 Docker 镜像。 7. 运行 Docker 容器。执行以下命令启动容器: ```bash docker run -p 5000:5000 chatglm ``` 这个命令会将容器的 5000 端口映射到宿主机的 5000 端口,使得你可以通过宿主机访问容器中的服务。 现在,你可以通过发送 POST 请求到 `http://localhost:5000/generate` 来使用 ChatGPT 生成文本。记得在请求的主体中包含一个 JSON 对象,其中包含一个名为 `prompt` 的字段,表示生成文本的提示。 这些是基本的步骤,你还可以根据需要进行进一步的配置和优

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值