Python 转换器无法加载

问题描述 投票:0回答:1

我有这个代码:

from flask import Flask, request, jsonify
from flask_cors import CORS
from transformers import pipeline

app = Flask(__name__)
CORS(app)
model = pipeline("text-generation", model="MBZUAI-Paris/Atlas-Chat-9B")

@app.route('/generate', methods=['POST'])
def generate():
    data = request.json
    user_input = data.get("input", "")
    response = model(user_input, max_length=1000)
    return jsonify({"output": response[0]['generated_text']})

if __name__ == '__main__':
    app.run(port=5000)

但是程序停止而没有输出。

我有最新的 Transformers、Accelerate、SafeTensors 和 PyTorch。我有Python 3.10.0。

我的电脑是Lenovo Yoga C-930 13IKB。

我尝试了这个以及许多其他模型,但似乎只有较小的模型可以工作,例如 Instruct 模型。每当我尝试稍大的模型时,它都会停止而不产生任何输出。

python flask artificial-intelligence huggingface-transformers
1个回答
0
投票

根据型号名称的规格,您的笔记本电脑似乎没有专用 GPU,并且具有 16 GB 的 RAM。 我在这里可能是错的,但我将假设这个配置并写下答案。

您尝试使用的型号是 ~19 GB,不适合您的 RAM。在这种情况下,使用量化模型可能会有所帮助,但由于 您的笔记本电脑上没有支持 CUDA 的 GPU,因此

bitsandbytes
不支持量化(CPU 和其他后端目前处于实验阶段)。

如果您有一种用途,可以使用此代码:

# pip install bitsandbytes accelerate
from flask import Flask, request, jsonify
from flask_cors import CORS
from transformers import AutoTokenizer, AutoModelForCausalLM, BitsAndBytesConfig

app = Flask(__name__)
CORS(app)

model_id = "MBZUAI-Paris/Atlas-Chat-9B"
quantization_config = BitsAndBytesConfig(load_in_4bit=True)

tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
    model_id,
    quantization_config=quantization_config,
    low_cpu_mem_usage=True, 
)


@app.route('/generate', methods=['POST'])
def generate():
    data = request.json
    user_input = data.get("input", "")
    messages = [
        {"role": "user", "content": user_input},
    ]
    input_ids = tokenizer.apply_chat_template(messages, return_tensors="pt", return_dict=True, add_generation_prompt=True)
    outputs = model.generate(**input_ids, max_new_tokens=1000, temperature=0.0)
    response = tokenizer.decode(outputs[0]).split("<start_of_turn>model")[-1]
    return jsonify({"output": response})


if __name__ == '__main__':
    app.run(port=5000)

但是如果您不这样做,您仍然可以使用

llama.cpp
在笔记本电脑的 CPU 上运行它。

首先,安装 llama.cpp Python 绑定:

pip install llama-cpp-python

然后在终端中输入以下内容来下载量化模型:

!huggingface-cli download mradermacher/Atlas-Chat-9B-GGUF Atlas-Chat-9B.Q4_K_M.gguf --local-dir . --local-dir-use-symlinks False

注意: 根据需要更改

--local-dir
参数。

然后使用此代码:

from flask import Flask, request, jsonify
from flask_cors import CORS
from llama_cpp import Llama

app = Flask(__name__)
CORS(app)

model_path = "./Atlas-Chat-9B.Q4_K_M.gguf" # Download the model file first

# Set gpu_layers to the number of layers to offload to GPU. Set to 0 if no GPU acceleration is available on your system.
llm = Llama(
  model_path=model_path,
  n_ctx=4096,  # The max sequence length to use - note that longer sequence lengths require much more resources
  n_threads=2,  # The number of CPU threads to use, tailor to your system and the resulting performance
  n_gpu_layers=0  # The number of layers to offload to GPU, if you have GPU acceleration available
)


@app.route('/generate', methods=['POST'])
def generate():
    data = request.json
    user_input = data.get("input", "")

    # Simple inference example
    output = llm(f"<start_of_turn>user\n{user_input}<end_of_turn>\n<start_of_turn>model\n", # Prompt
        max_tokens=1000,  # Generate up to 1000 tokens
        stop=["<end_of_turn>"],   # Example stop token
        echo=False        # Whether to echo the prompt
    )

    return jsonify({"output": output["choices"][0]["text"]})


if __name__ == '__main__':
    app.run(port=5000)

输入模式根据

Atlas-Chat
模型中使用的格式进行修改。

我在这里使用了 4 位 gguf 量化模型,它有效地将模型大小降至 5.76 GB该模型可以舒适地在您的PC上加载,但会在一定程度上牺牲几代的质量。

© www.soinside.com 2019 - 2024. All rights reserved.