Spaces:
Sleeping
Sleeping
Refactor model loading process in chatbot application to prioritize local path loading, with enhanced error handling and fallback mechanisms for HuggingFace models and PEFT adapters.
Browse files
app.py
CHANGED
|
@@ -6,31 +6,74 @@ from peft import PeftModel
|
|
| 6 |
|
| 7 |
# Load tokenizer và model
|
| 8 |
print("Đang tải model...")
|
|
|
|
| 9 |
|
| 10 |
-
|
| 11 |
-
|
| 12 |
-
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 34 |
|
| 35 |
# Xác định device
|
| 36 |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|
|
|
|
| 6 |
|
| 7 |
# Load tokenizer và model
|
| 8 |
print("Đang tải model...")
|
| 9 |
+
import os
|
| 10 |
|
| 11 |
+
base_model_name = "Qwen/Qwen3-0.6B"
|
| 12 |
+
adapter_path_local = "./qwen3-finetuned"
|
| 13 |
+
model_loaded = False
|
| 14 |
+
|
| 15 |
+
# Ưu tiên 1: Thử load từ local path (nếu có)
|
| 16 |
+
if os.path.exists(adapter_path_local) and os.path.exists(os.path.join(adapter_path_local, "adapter_config.json")):
|
| 17 |
+
try:
|
| 18 |
+
print(f"Đang load từ local path: {adapter_path_local}")
|
| 19 |
+
base_model = AutoModelForCausalLM.from_pretrained(
|
| 20 |
+
base_model_name,
|
| 21 |
+
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
|
| 22 |
+
device_map="auto" if torch.cuda.is_available() else None,
|
| 23 |
+
)
|
| 24 |
+
model = PeftModel.from_pretrained(base_model, adapter_path_local)
|
| 25 |
+
tokenizer = AutoTokenizer.from_pretrained(adapter_path_local, local_files_only=True)
|
| 26 |
+
model_loaded = True
|
| 27 |
+
print("✓ Đã load model từ local path")
|
| 28 |
+
except Exception as e:
|
| 29 |
+
print(f"✗ Không thể load từ local: {e}")
|
| 30 |
+
|
| 31 |
+
# Ưu tiên 2: Thử load từ HuggingFace như full model
|
| 32 |
+
if not model_loaded:
|
| 33 |
+
try:
|
| 34 |
+
model_name = "cochi1706/decoder/qwen3-finetuned"
|
| 35 |
+
print(f"Đang thử load full model từ: {model_name}")
|
| 36 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
| 37 |
+
model = AutoModelForCausalLM.from_pretrained(
|
| 38 |
+
model_name,
|
| 39 |
+
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
|
| 40 |
+
device_map="auto" if torch.cuda.is_available() else None,
|
| 41 |
+
)
|
| 42 |
+
model_loaded = True
|
| 43 |
+
print("✓ Đã load full model từ HuggingFace")
|
| 44 |
+
except Exception as e:
|
| 45 |
+
print(f"✗ Không thể load full model: {e}")
|
| 46 |
+
|
| 47 |
+
# Ưu tiên 3: Load như PEFT adapter từ HuggingFace
|
| 48 |
+
if not model_loaded:
|
| 49 |
+
try:
|
| 50 |
+
print("Đang load base model và PEFT adapter từ HuggingFace...")
|
| 51 |
+
base_model = AutoModelForCausalLM.from_pretrained(
|
| 52 |
+
base_model_name,
|
| 53 |
+
torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
|
| 54 |
+
device_map="auto" if torch.cuda.is_available() else None,
|
| 55 |
+
)
|
| 56 |
+
# Thử các adapter paths khác nhau
|
| 57 |
+
adapter_paths = [
|
| 58 |
+
"cochi1706/coding-assistant",
|
| 59 |
+
"cochi1706/decoder/qwen3-finetuned",
|
| 60 |
+
]
|
| 61 |
+
for adapter_path in adapter_paths:
|
| 62 |
+
try:
|
| 63 |
+
print(f" Thử adapter path: {adapter_path}")
|
| 64 |
+
model = PeftModel.from_pretrained(base_model, adapter_path)
|
| 65 |
+
tokenizer = AutoTokenizer.from_pretrained(adapter_path)
|
| 66 |
+
model_loaded = True
|
| 67 |
+
print(f"✓ Đã load PEFT adapter từ: {adapter_path}")
|
| 68 |
+
break
|
| 69 |
+
except Exception as e:
|
| 70 |
+
print(f" ✗ Không thể load từ {adapter_path}: {e}")
|
| 71 |
+
continue
|
| 72 |
+
except Exception as e:
|
| 73 |
+
print(f"✗ Không thể load base model: {e}")
|
| 74 |
+
|
| 75 |
+
if not model_loaded:
|
| 76 |
+
raise RuntimeError("Không thể load model từ bất kỳ nguồn nào. Vui lòng kiểm tra lại model path.")
|
| 77 |
|
| 78 |
# Xác định device
|
| 79 |
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
|