cochi1706 commited on
Commit
376a746
·
1 Parent(s): 0f06294

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
Files changed (1) hide show
  1. app.py +67 -24
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
- # Thử load trực tiếp từ path đầy đủ trước
11
- try:
12
- model_name = "cochi1706/decoder/qwen3-finetuned"
13
- print(f"Đang thử load model từ: {model_name}")
14
- tokenizer = AutoTokenizer.from_pretrained(model_name)
15
- model = AutoModelForCausalLM.from_pretrained(
16
- model_name,
17
- torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
18
- device_map="auto" if torch.cuda.is_available() else None,
19
- )
20
- except Exception as e:
21
- print(f"Không thể load trực tiếp: {e}")
22
- print("Đang thử load như PEFT adapter...")
23
- # Nếu không được, thử load như PEFT adapter
24
- base_model_name = "Qwen/Qwen3-0.6B"
25
- adapter_repo = "cochi1706/coding-assistant"
26
-
27
- base_model = AutoModelForCausalLM.from_pretrained(
28
- base_model_name,
29
- torch_dtype=torch.float16 if torch.cuda.is_available() else torch.float32,
30
- device_map="auto" if torch.cuda.is_available() else None,
31
- )
32
- model = PeftModel.from_pretrained(base_model, adapter_repo)
33
- tokenizer = AutoTokenizer.from_pretrained(adapter_repo)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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")