DocterXray-v1.2 / app.py
Aekanun's picture
rev app
2a60823
raw
history blame
6.75 kB
import spaces
import os
import sys
import subprocess
def install_packages():
subprocess.check_call([sys.executable, "-m", "pip", "install", "unsloth-zoo"])
subprocess.check_call([sys.executable, "-m", "pip", "install", "--no-deps", "git+https://github.com/unslothai/unsloth.git"])
try:
install_packages()
except Exception as e:
print(f"Failed to install packages: {e}")
###
# เพิ่มบรรทัดนี้ที่ต้นโค้ด ก่อน import torch
import os
os.environ['NVIDIA_VISIBLE_DEVICES'] = ''
###
import warnings
import torch
# เปลี่ยนแปลงที่ 1: เพิ่มการตั้งค่า dynamo ก่อน import unsloth
torch._dynamo.config.suppress_errors = True
torch._dynamo.config.verbose = False
from transformers import TextStreamer
import gradio as gr
from huggingface_hub import login
from PIL import Image
warnings.filterwarnings('ignore')
model = None
tokenizer = None
if 'HUGGING_FACE_HUB_TOKEN' in os.environ:
print("กำลังเข้าสู่ระบบ Hugging Face Hub...")
login(token=os.environ['HUGGING_FACE_HUB_TOKEN'])
else:
print("คำเตือน: ไม่พบ HUGGING_FACE_HUB_TOKEN")
# @spaces.GPU
# def load_model():
# global model, tokenizer
# print("กำลังโหลดโมเดล...")
# try:
# from unsloth import FastVisionModel
# # โหลด base model และ tokenizer แบบพื้นฐาน
# base_model, tokenizer = FastVisionModel.from_pretrained(
# "unsloth/Llama-3.2-11B-Vision-Instruct"
# )
# print("โหลด base model และ tokenizer สำเร็จ")
# # โหลดโมเดล fine-tuned แบบพื้นฐาน
# from transformers import AutoModelForVision2Seq
# model = AutoModelForVision2Seq.from_pretrained(
# "Aekanun/Llama-3.2-11B-Vision-Instruct-XRay"
# ).to('cuda')
# print("โหลดโมเดลสำเร็จ!")
# return True
# except Exception as e:
# print(f"เกิดข้อผิดพลาดในการโหลดโมเดล: {str(e)}")
# import traceback
# traceback.print_exc() # เพิ่มการแสดง stack trace
# return False
@spaces.GPU
def load_model():
global model, tokenizer
print("กำลังโหลดโมเดล...")
try:
# โหลด tokenizer จาก base model
from unsloth import FastVisionModel
from transformers import AutoTokenizer
print("กำลังโหลด tokenizer...")
base_model, _tokenizer = FastVisionModel.from_pretrained(
"unsloth/Llama-3.2-11B-Vision-Instruct",
use_gradient_checkpointing = "unsloth"
)
tokenizer = _tokenizer # กำหนดค่าให้ตัวแปร global โดยตรง
print(f"2. ประเภทของ tokenizer: {type(tokenizer)}")
print(f"3. เมธอดที่มีใน tokenizer: {dir(tokenizer)}")
print("4. Global tokenizer after assignment:", type(tokenizer)) # เช็คค่า
print("โหลด base model และ tokenizer สำเร็จ กำลังโหลดโมเดลที่ fine-tune...")
# โหลดโมเดล fine-tuned
from transformers import AutoModelForVision2Seq
print("กำลังโหลดโมเดล fine-tuned...")
model = AutoModelForVision2Seq.from_pretrained(
"Aekanun/Llama-3.2-11B-Vision-Instruct-XRay",
load_in_4bit=True,
torch_dtype=torch.float16
).to('cuda')
FastVisionModel.for_inference(model)
print("โหลดโมเดลสำเร็จ!")
return True
except Exception as e:
print(f"เกิดข้อผิดพลาดในการโหลดโมเดล: {str(e)}")
import traceback
traceback.print_exc()
return False
@spaces.GPU(duration=30)
def process_image(image):
global model, tokenizer
print("Type of model:", type(model))
print("\nใน process_image():")
print("A. Type of tokenizer:", type(tokenizer))
if tokenizer is not None:
print("B. Available methods:", dir(tokenizer))
if image is None:
return "กรุณาอัพโหลดรูปภาพ"
try:
if not isinstance(image, Image.Image):
image = Image.fromarray(image)
print("0. Image info:", type(image), image.size) # เพิ่ม debug ข้อมูลรูปภาพ
instruction = "You are an expert radiographer. Describe accurately what you see in this image."
messages = [
{"role": "user", "content": [
{"type": "image"},
{"type": "text", "text": instruction}
]}
]
# input_text = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
# inputs = tokenizer(
# image,
# input_text,
# add_special_tokens=False,
# return_tensors="pt",
# ).to("cuda")
print("1. Messages:", messages)
print("2. Tokenizer type:", type(tokenizer))
input_text = tokenizer.apply_chat_template(messages, add_generation_prompt=True)
print("3. Chat template success:", input_text[:100])
inputs = tokenizer(
image,
input_text,
add_special_tokens=False,
return_tensors="pt",
).to("cuda")
print("3. Tokenizer inputs:", inputs.keys()) # Debug 3
text_streamer = TextStreamer(tokenizer, skip_prompt=True)
outputs = model.generate(
**inputs,
streamer=text_streamer,
max_new_tokens=128,
use_cache=True,
temperature=1.5,
min_p=0.1
)
return tokenizer.decode(outputs[0], skip_special_tokens=True).strip()
except Exception as e:
return f"เกิดข้อผิดพลาด: {str(e)}"
print("กำลังเริ่มต้นแอปพลิเคชัน...")
if load_model():
demo = gr.Interface(
fn=process_image,
inputs=gr.Image(type="pil"),
outputs=gr.Textbox(),
title="Medical Vision Analysis"
)
if __name__ == "__main__":
demo.launch()
else:
print("ไม่สามารถเริ่มต้นแอปพลิเคชันได้")