[THUDM/ChatGLM-6B][BUG/Help] 布置到windows服务器上,没有报错,但AI也没有回复

2024-06-17 150 views
1

我本地电脑上能正常运行cli_demo.py,但部署在腾讯GPU服务器上却有问题,我是通过远程桌面连接到服务器,然后打开VSCdoe跑cli_demo.py,提问之后AI没有回复消息,也没报错,字符串变量response没有任何内容(cli_demo.py第18~21行),我没改动过代码,都是本地测试过在上传到服务器的。 试过换了windows server 2022系统,还是同样的问题。

---------4.15更新-------- int4量化版可以输出内容,标准版还是有问题,所以bug可能出在模型。

我没改动过代码,直接VSCdoe运行cli_demo.py

Environment
- 显卡:P40
- OS:windwos server 2019
- Python:Python3.10
- Transformers:4.27.1
- PyTorch:2.0.0+cu118
- CUDA Support (`python -c "import torch; print(torch.cuda.is_available())"`) :True

回答

9

@ZXStudio 回复消息字符串变量response没有任何内容? 在远程服务器上运行了,你怎么去执行的??

试试 服务器用 api.py 然后 本地 http 接口访问服务器。http超时设置100分钟,如果服务器慢的话。

6

我修改后用的这个cpu 可以的。

api_v1.1.py # cpu 32G


from fastapi import FastAPI, Request
from transformers import AutoTokenizer, AutoModel
import uvicorn, json, datetime
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()

@app.post("/")
async def create_item(request: Request):
    global model, tokenizer
    json_post_raw = await request.json()

    print('json_post_raw:',json_post_raw)

    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 2048,
                                   top_p=top_p if top_p else 0.7,
                                   temperature=temperature if temperature else 0.95)
    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__':
    tokenizer = AutoTokenizer.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True)
    #model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).half().cuda()

    # 需要大概 32GB 内存     cpu
    model = AutoModel.from_pretrained("THUDM/chatglm-6b", trust_remote_code=True).float() 

    model.eval()
    uvicorn.run(app, host='0.0.0.0', port=8000, workers=1)
7

您这个支持列队吗?放服务器上,小组5个人,很快卡死了哈哈-

1

@ZXStudio 回复消息字符串变量response没有任何内容? 在远程服务器上运行了,你怎么去执行的??

试试 服务器用 api.py 然后 本地 http 接口访问服务器。http超时设置100分钟,如果服务器慢的话。

我是远程桌面连到腾讯云GPU服务器,然后运行cli_demo.py,不是Web方式,也不是API调用方式。

2

我的服务器是腾讯云GPU服务器,不是CPU方式。