A Le Thanh Son commited on
Commit
a6403d5
·
1 Parent(s): 955241f
Files changed (2) hide show
  1. app.py +43 -13
  2. generator.py +10 -2
app.py CHANGED
@@ -11,6 +11,9 @@ from dataclasses import dataclass
11
  from generator import Segment, load_csm_1b
12
  from huggingface_hub import login
13
 
 
 
 
14
  # Kiểm tra xem có GPU không và cấu hình thiết bị phù hợp
15
  device = "cuda" if torch.cuda.is_available() else "cpu"
16
  print(f"Sử dụng thiết bị: {device}")
@@ -28,17 +31,29 @@ def login_huggingface():
28
  # Đăng nhập khi khởi động
29
  login_huggingface()
30
 
31
- # Tải mô hình CSM-1B
32
  generator = None
 
33
 
34
- def load_model():
35
- global generator
36
- if generator is None:
37
- print("Đang tải mô hình CSM-1B...")
38
- generator = load_csm_1b(device=device)
 
 
 
39
  print("Đã tải xong mô hình!")
40
  return generator
41
 
 
 
 
 
 
 
 
 
42
  # Hàm chuyển đổi âm thanh thành tensor
43
  def audio_to_tensor(audio_path: str) -> Tuple[torch.Tensor, int]:
44
  waveform, sample_rate = torchaudio.load(audio_path)
@@ -68,8 +83,8 @@ def generate_speech(
68
  top_k: int = 50,
69
  progress=gr.Progress()
70
  ) -> str:
71
- # Tải mô hình nếu chưa tải
72
- generator = load_model()
73
 
74
  # Chuẩn bị ngữ cảnh (context)
75
  context = []
@@ -119,8 +134,8 @@ def generate_speech_simple(
119
  top_k: int = 50,
120
  progress=gr.Progress()
121
  ) -> str:
122
- # Tải mô hình nếu chưa tải
123
- generator = load_model()
124
 
125
  progress(0.3, "Đang tạo âm thanh...")
126
  # Tạo âm thanh từ văn bản
@@ -282,8 +297,11 @@ def create_demo():
282
  ZeroGPU giúp giải phóng bộ nhớ GPU khi không sử dụng, giúp tiết kiệm tài nguyên và cải thiện hiệu suất.
283
 
284
  Khi bạn tạo âm thanh, GPU sẽ được sử dụng tự động và giải phóng sau khi hoàn thành.
 
 
285
  """)
286
 
 
287
  def check_gpu():
288
  if torch.cuda.is_available():
289
  gpu_name = torch.cuda.get_device_name(0)
@@ -296,6 +314,21 @@ def create_demo():
296
  gpu_info = gr.Textbox(label="Thông tin GPU", interactive=False)
297
 
298
  check_gpu_btn.click(fn=check_gpu, inputs=None, outputs=gpu_info)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
299
 
300
  # Kết nối các thành phần
301
  generate_btn.click(
@@ -327,9 +360,6 @@ def create_demo():
327
  ],
328
  outputs=output_audio_context
329
  )
330
-
331
- # Tải mô hình khi khởi động
332
- demo.load(fn=load_model)
333
 
334
  return demo
335
 
 
11
  from generator import Segment, load_csm_1b
12
  from huggingface_hub import login
13
 
14
+ # Tắt tính năng compile của torch để tránh lỗi triton
15
+ torch._dynamo.config.suppress_errors = True
16
+
17
  # Kiểm tra xem có GPU không và cấu hình thiết bị phù hợp
18
  device = "cuda" if torch.cuda.is_available() else "cpu"
19
  print(f"Sử dụng thiết bị: {device}")
 
31
  # Đăng nhập khi khởi động
32
  login_huggingface()
33
 
34
+ # Biến toàn cục để theo dõi trạng thái mô hình
35
  generator = None
36
+ model_loaded = False
37
 
38
+ # Hàm tải mô hình được gọi trong ZeroGPU
39
+ @spaces.GPU
40
+ def initialize_model():
41
+ global generator, model_loaded
42
+ if not model_loaded:
43
+ print("Đang tải mô hình CSM-1B trong GPU...")
44
+ generator = load_csm_1b(device="cuda")
45
+ model_loaded = True
46
  print("Đã tải xong mô hình!")
47
  return generator
48
 
49
+ # Hàm lấy mô hình đã tải
50
+ @spaces.GPU
51
+ def get_model():
52
+ global generator, model_loaded
53
+ if not model_loaded:
54
+ return initialize_model()
55
+ return generator
56
+
57
  # Hàm chuyển đổi âm thanh thành tensor
58
  def audio_to_tensor(audio_path: str) -> Tuple[torch.Tensor, int]:
59
  waveform, sample_rate = torchaudio.load(audio_path)
 
83
  top_k: int = 50,
84
  progress=gr.Progress()
85
  ) -> str:
86
+ # Lấy mô hình đã tải
87
+ generator = get_model()
88
 
89
  # Chuẩn bị ngữ cảnh (context)
90
  context = []
 
134
  top_k: int = 50,
135
  progress=gr.Progress()
136
  ) -> str:
137
+ # Lấy mô hình đã tải
138
+ generator = get_model()
139
 
140
  progress(0.3, "Đang tạo âm thanh...")
141
  # Tạo âm thanh từ văn bản
 
297
  ZeroGPU giúp giải phóng bộ nhớ GPU khi không sử dụng, giúp tiết kiệm tài nguyên và cải thiện hiệu suất.
298
 
299
  Khi bạn tạo âm thanh, GPU sẽ được sử dụng tự động và giải phóng sau khi hoàn thành.
300
+
301
+ Lưu ý: Trong môi trường ZeroGPU, CUDA không được khởi tạo trong quá trình chính, mà chỉ trong các hàm có decorator @spaces.GPU.
302
  """)
303
 
304
+ @spaces.GPU
305
  def check_gpu():
306
  if torch.cuda.is_available():
307
  gpu_name = torch.cuda.get_device_name(0)
 
314
  gpu_info = gr.Textbox(label="Thông tin GPU", interactive=False)
315
 
316
  check_gpu_btn.click(fn=check_gpu, inputs=None, outputs=gpu_info)
317
+
318
+ # Thêm nút tải mô hình
319
+ load_model_btn = gr.Button("Tải mô hình")
320
+ model_status = gr.Textbox(label="Trạng thái mô hình", interactive=False)
321
+
322
+ @spaces.GPU
323
+ def load_model_and_report():
324
+ global model_loaded
325
+ if model_loaded:
326
+ return "Mô hình đã được tải trước đó!"
327
+ else:
328
+ initialize_model()
329
+ return "Mô hình đã được tải thành công!"
330
+
331
+ load_model_btn.click(fn=load_model_and_report, inputs=None, outputs=model_status)
332
 
333
  # Kết nối các thành phần
334
  generate_btn.click(
 
360
  ],
361
  outputs=output_audio_context
362
  )
 
 
 
363
 
364
  return demo
365
 
generator.py CHANGED
@@ -10,6 +10,8 @@ from tokenizers.processors import TemplateProcessing
10
  from transformers import AutoTokenizer
11
  from watermarking import CSM_1B_GH_WATERMARK, load_watermarker, watermark
12
 
 
 
13
 
14
  @dataclass
15
  class Segment:
@@ -174,8 +176,14 @@ def load_csm_1b(device: str = "cuda") -> Generator:
174
  Generator: Đối tượng Generator để tạo âm thanh từ văn bản
175
  """
176
  try:
177
- model = Model.from_pretrained("sesame/csm-1b")
178
- model.to(device=device, dtype=torch.bfloat16)
 
 
 
 
 
 
179
 
180
  generator = Generator(model)
181
  return generator
 
10
  from transformers import AutoTokenizer
11
  from watermarking import CSM_1B_GH_WATERMARK, load_watermarker, watermark
12
 
13
+ # Tắt tính năng compile của torch để tránh lỗi triton
14
+ torch._dynamo.config.suppress_errors = True
15
 
16
  @dataclass
17
  class Segment:
 
176
  Generator: Đối tượng Generator để tạo âm thanh từ văn bản
177
  """
178
  try:
179
+ # Trong ZeroGPU, không nên khởi tạo CUDA trong quá trình chính
180
+ # Chỉ chuyển mô hình sang GPU khi được gọi trong hàm có decorator @spaces.GPU
181
+ if 'cuda' in device and not torch.cuda.is_initialized():
182
+ # Sử dụng CPU cho quá trình chính
183
+ model = Model.from_pretrained("sesame/csm-1b")
184
+ else:
185
+ model = Model.from_pretrained("sesame/csm-1b")
186
+ model.to(device=device, dtype=torch.bfloat16)
187
 
188
  generator = Generator(model)
189
  return generator