我有这个代码:
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 模型。每当我尝试稍大的模型时,它都会停止而不产生任何输出。
根据型号名称的规格,您的笔记本电脑似乎没有专用 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上加载,但会在一定程度上牺牲几代的质量。