qwen1.5_1.8B / app.py
ljy266987
try
43cd5f2
raw
history blame
5.87 kB
import os
##
# 获取全部环境变量
env_vars = os.environ
os.environ["PYTORCH_NVML_BASED_CUDA_CHECK"] = 0
import torch
if torch.cuda.is_available():
print("CUDA is available. Listing available GPUs:")
# 获取并打印GPU数量
num_gpus = torch.cuda.device_count()
for i in range(num_gpus):
print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
# 其他相关信息,例如内存
print(f" Memory Allocated: {torch.cuda.memory_allocated(i) / 1024 ** 2:.0f} MB")
print(f" Memory Reserved: {torch.cuda.memory_reserved(i) / 1024 ** 2:.0f} MB")
else:
print("CUDA is not available.")
# 遍历并打印环境变量
for key, value in env_vars.items():
print(f"{key}: {value}")
##
import subprocess
# 运行nvidia-smi
result = subprocess.run(
['nvidia-smi'], text=True
)
import spaces
from threading import Thread
from typing import Iterator
import gradio as gr
import torch
from modelscope import AutoModelForCausalLM, AutoTokenizer
from transformers import TextIteratorStreamer
MAX_MAX_NEW_TOKENS = 2048
DEFAULT_MAX_NEW_TOKENS = 1024
MAX_INPUT_TOKEN_LENGTH = int(os.getenv("MAX_INPUT_TOKEN_LENGTH", "4096"))
##
# 检查CUDA是否可用
def print_gpu():
result = subprocess.run(
['nvidia-smi'], text=True
)
if torch.cuda.is_available():
print("CUDA is available. Listing available GPUs:")
# 获取并打印GPU数量
num_gpus = torch.cuda.device_count()
for i in range(num_gpus):
print(f"GPU {i}: {torch.cuda.get_device_name(i)}")
# 其他相关信息,例如内存
print(f" Memory Allocated: {torch.cuda.memory_allocated(i) / 1024 ** 2:.0f} MB")
print(f" Memory Reserved: {torch.cuda.memory_reserved(i) / 1024 ** 2:.0f} MB")
else:
print("CUDA is not available.")
##
os.environ['CUDA_VISIBLE_DEVICES'] = '-1'
print_gpu()
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2,3,4,5,6,7,8'
print_gpu()
os.environ['CUDA_VISIBLE_DEVICES'] = '0,1,2,3,4,5,6,7,8,9,10,11,12,13,14'
print_gpu()
if not torch.cuda.is_available():
DESCRIPTION += "\n<p>Running on CPU 🥶 This demo does not work on CPU.</p>"
if torch.cuda.is_available():
model_id = "qwen/Qwen1.5-1.8B-Chat"
model = AutoModelForCausalLM.from_pretrained(model_id, torch_dtype=torch.float16, device_map="auto")
tokenizer = AutoTokenizer.from_pretrained(model_id)
tokenizer.use_default_system_prompt = False
@spaces.GPU
def generate(
message: str,
chat_history: list[tuple[str, str]],
system_prompt: str,
max_new_tokens: int = 1024,
temperature: float = 0.6,
top_p: float = 0.9,
top_k: int = 50,
repetition_penalty: float = 1.2,
) -> Iterator[str]:
print_gpu()
conversation = []
if system_prompt:
conversation.append({"role": "system", "content": system_prompt})
for user, assistant in chat_history:
conversation.extend([{"role": "user", "content": user}, {"role": "assistant", "content": assistant}])
conversation.append({"role": "user", "content": message})
input_ids = tokenizer.apply_chat_template(conversation, tokenize=False,add_generation_prompt=True)
input_ids = tokenizer([input_ids],return_tensors="pt").to(model.device)
streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
generate_kwargs = dict(
input_ids=input_ids.input_ids,
streamer=streamer,
max_new_tokens=max_new_tokens,
do_sample=True,
top_p=top_p,
top_k=top_k,
temperature=temperature,
repetition_penalty=repetition_penalty,
)
t = Thread(target=model.generate, kwargs=generate_kwargs)
t.start()
#dictionary update sequence element #0 has length 19; 2 is required
outputs = []
for text in streamer:
outputs.append(text)
yield "".join(outputs)
#outputs = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
print(outputs)
#yield outputs
chat_interface = gr.ChatInterface(
fn=generate,
additional_inputs=[
gr.Textbox(label="System prompt", lines=6),
gr.Slider(
label="Max new tokens",
minimum=1,
maximum=MAX_MAX_NEW_TOKENS,
step=1,
value=DEFAULT_MAX_NEW_TOKENS,
),
gr.Slider(
label="Temperature",
minimum=0.1,
maximum=4.0,
step=0.1,
value=0.6,
),
gr.Slider(
label="Top-p (nucleus sampling)",
minimum=0.05,
maximum=1.0,
step=0.05,
value=0.9,
),
gr.Slider(
label="Top-k",
minimum=1,
maximum=1000,
step=1,
value=50,
),
gr.Slider(
label="Repetition penalty",
minimum=1.0,
maximum=2.0,
step=0.05,
value=1.2,
),
],
stop_btn=None,
examples=[
["你好!你是谁?"],
["请简单介绍一下大语言模型?"],
["请讲一个小人物成功的故事."],
["浙江的省会在哪里?"],
["写一篇100字的文章,题目是'人工智能开源的优势'"],
],
)
with gr.Blocks(css="style.css") as demo:
gr.Markdown("""<p align="center"><img src="https://modelscope.cn/api/v1/models/qwen/Qwen-VL-Chat/repo?Revision=master&FilePath=assets/logo.jpg&View=true" style="height: 80px"/><p>""")
gr.Markdown("""<center><font size=8>Qwen1.5-1.8B-Chat Bot👾</center>""")
gr.Markdown("""<center><font size=4>通义千问1.5-1.8B(Qwen1.5-1.8B) 是阿里云研发的通义千问大模型系列的70亿参数规模的模型。</center>""")
chat_interface.render()
if __name__ == "__main__":
demo.queue(max_size=20).launch()