当前位置:   article > 正文

VisualGLM-6B的环境条件和二次接口开发_运行visualglm的环境

运行visualglm的环境

获取项目

项目下载

模型下载

项目环境(conda)

  • python 3.8.18
  • pytorch 1.11.0
  • cuda 11.3.1
  • requirements.txt
SwissArmyTransformer>=0.4.4
#torch>1.10.0
#torchvision
transformers>=4.27.1
mdtex2html
gradio
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

api_hf.api

由于前面已经下载了模型,所以直接使用api_hf.py,但是原有api只有基于base64的接口,所以我这里加上了基于公开url图片的接口。

import os
import json
from transformers import AutoTokenizer, AutoModel
import uvicorn
from fastapi import FastAPI, Request
import datetime
from model import process_image
import torch
import requests
import base64
import tempfile
import os


tokenizer = AutoTokenizer.from_pretrained("/home/panxiujin/model/vlm", trust_remote_code=True)
model = AutoModel.from_pretrained("/home/panxiujin/model/vlm", trust_remote_code=True).half().cuda()


app = FastAPI()
@app.post('/imgByBase')
async def visual_glm(request: Request):
    json_post_raw = await request.json()
    print("Start to process request")

    json_post = json.dumps(json_post_raw)
    request_data = json.loads(json_post)

    history = request_data.get("history")
    image_encoded = request_data.get("image")
    query = request_data.get("text")
    image_path = process_image(image_encoded)

    with torch.no_grad():    
        result = model.stream_chat(tokenizer, image_path, query, history=history)
    last_result = None
    for value in result:
        last_result = value
    answer = last_result[0]

    if os.path.isfile(image_path):
        os.remove(image_path)
    now = datetime.datetime.now()
    time = now.strftime("%Y-%m-%d %H:%M:%S")
    response = {
        "result": answer,
        "history": history,
        "status": 200,
        "time": time
    }
    return response


async def process_image_url(image_url):
    # 从远程 URL 获取图片内容
    response = requests.get(image_url)
    
    # 将图片内容进行 Base64 编码
    image_encoded = base64.b64encode(response.content).decode('utf-8')

    # 使用短的文件名保存图像
    _, temp_image_path = tempfile.mkstemp(suffix=".png")
    
    with open(temp_image_path, "wb") as temp_image_file:
        temp_image_file.write(base64.b64decode(image_encoded))

    return temp_image_path

@app.post('/imgByUrl')
async def visual_glm_url(request: Request):
    json_post_raw = await request.json()
    print("Start to process request")

    json_post = json.dumps(json_post_raw)
    request_data = json.loads(json_post)

    history = request_data.get("history")
    image_url = request_data.get("image")
    query = request_data.get("text")
    
    # 异步调用 process_image 函数
    image_path = await process_image_url(image_url)

    with torch.no_grad():    
        result = model.stream_chat(tokenizer, image_path, query, history=history)
    last_result = None
    for value in result:
        last_result = value
    answer = last_result[0]

    # 删除临时文件
    os.remove(image_path)

    now = datetime.datetime.now()
    time = now.strftime("%Y-%m-%d %H:%M:%S")
    response = {
        "result": answer,
        "history": history,
        "status": 200,
        "time": time
    }
    return response


if __name__ == "__main__":
   uvicorn.run(app, host='0.0.0.0', port=1549, workers=1)

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106

CURL

调用base64的

curl --request POST \
  --url http://127.0.0.1:1549/imgByUrl \
  --header 'content-type: application/json' \
  --data '{
    "image": "https://zhengxin-pub.cdn.bcebos.com/mark/9cd6f8cc3cd20943e1769ac6a67ebeec.jpg?x-bce-process=image/resize,m_lfit,w_112",
    "text": "这个商标有什么图形?有哪些图素?",
    "history": []
}'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

调用url的

curl --request POST \
  --url http://127.0.0.1:1549/imgByUrl \
  --header 'content-type: application/json' \
  --data '{
    "image": "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",
    "text": "这个商标有什么图形?有哪些图素?",
    "history": []
}'
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

畅爽使用~

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

闽ICP备14008679号