qwen1.5_1.8B / app.py
ljy266987
add gpu info
e713918
raw
history blame
5.34 kB
import os
##
# 获取全部环境变量
env_vars = os.environ
# 遍历并打印环境变量
for key, value in env_vars.items():
print(f"{key}: {value}")
##
import subprocess
import json
# 运行nvidia-smi命令并以JSON格式获取输出
result = subprocess.run(
['nvidia-smi', '--query-gpu=index,name,memory.total,memory.used,memory.free,utilization.gpu,temperature.gpu',
'--format=csv,noheader,nounits', '--json'],
stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True
)
# 解析输出
if result.stdout:
gpu_info_json = result.stdout
# 将JSON字符串转换成Python字典
gpu_info = json.loads(gpu_info_json)
# 打印全部GPU信息
print(json.dumps(gpu_info, indent=4))
else:
print("Error:", result.stderr)
##
import GPUtil
# 获取所有可用的GPU列表
gpus = GPUtil.getGPUs()
# 遍历列表,打印每个GPU的详细信息
for gpu in gpus:
print(f"GPU ID: {gpu.id}, Name: {gpu.name}")
print(f" Total Memory: {gpu.memoryTotal}MB")
print(f" Used Memory: {gpu.memoryUsed}MB")
print(f" Free Memory: {gpu.memoryFree}MB")
print(f" GPU Utilization: {gpu.load*100}%")
print(f" GPU Temperature: {gpu.temperature}C\n")
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"))
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]:
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()