DarrenDeo commited on
Commit
7ab7ce0
·
1 Parent(s): 455e619

Feat: Use Python script for model download to fix permission error

Browse files
Files changed (3) hide show
  1. Dockerfile +3 -2
  2. setup.sh +4 -27
  3. src/download_models.py +49 -0
Dockerfile CHANGED
@@ -1,3 +1,5 @@
 
 
1
  # 1. Gunakan base image Python yang stabil
2
  FROM python:3.11-slim
3
 
@@ -25,5 +27,4 @@ EXPOSE 7860
25
 
26
  # 9. Perintah untuk menjalankan aplikasi
27
  # Jalankan setup.sh untuk mengunduh model, LALU jalankan server Gunicorn.
28
- # Semua akan berjalan sebagai root, yang akan menyelesaikan masalah izin.
29
- CMD ["/bin/bash", "-c", "./setup.sh && gunicorn --bind 0.0.0.0:7860 --timeout 600 app:app"]
 
1
+ # Dockerfile
2
+
3
  # 1. Gunakan base image Python yang stabil
4
  FROM python:3.11-slim
5
 
 
27
 
28
  # 9. Perintah untuk menjalankan aplikasi
29
  # Jalankan setup.sh untuk mengunduh model, LALU jalankan server Gunicorn.
30
+ CMD ["/bin/bash", "-c", "./setup.sh && gunicorn --bind 0.0.0.0:7860 --timeout 600 app:app"]
 
setup.sh CHANGED
@@ -1,35 +1,12 @@
1
  #!/bin/bash
2
 
3
- # Script ini akan berjalan sekali saat Space dibangun.
4
- # Tujuannya adalah mengunduh semua model yang diperlukan ke persistent storage.
5
-
6
  echo "=================================================="
7
- echo "Memulai proses setup: Mengunduh semua model AI..."
8
  echo "=================================================="
9
 
10
- # Direktori di dalam persistent storage untuk menyimpan model
11
- # Path ini akan menjadi /data/models di dalam container Docker Anda
12
- MODEL_STORAGE_PATH="/data/models"
13
-
14
- # Buat direktori jika belum ada
15
- mkdir -p $MODEL_STORAGE_PATH
16
-
17
- # Gunakan huggingface-cli untuk mengunduh setiap model
18
- # Perintah ini akan mengunduh model dan menyimpannya di path yang kita tentukan
19
-
20
- echo "Mengunduh BERT..."
21
- huggingface-cli download indobenchmark/indobert-base-p2 --local-dir $MODEL_STORAGE_PATH/bert --local-dir-use-symlinks False
22
-
23
- echo "Mengunduh RoBERTa..."
24
- huggingface-cli download cahya/roberta-base-indonesian-522M --local-dir $MODEL_STORAGE_PATH/roberta --local-dir-use-symlinks False
25
-
26
- echo "Mengunduh ELECTRA..."
27
- huggingface-cli download google/electra-base-discriminator --local-dir $MODEL_STORAGE_PATH/electra --local-dir-use-symlinks False
28
-
29
- echo "Mengunduh XLNet..."
30
- huggingface-cli download xlnet-base-cased --local-dir $MODEL_STORAGE_PATH/xlnet --local-dir-use-symlinks False
31
 
32
  echo "=================================================="
33
- echo "Semua model telah berhasil diunduh ke $MODEL_STORAGE_PATH"
34
  echo "=================================================="
35
-
 
1
  #!/bin/bash
2
 
 
 
 
3
  echo "=================================================="
4
+ echo "Menjalankan skrip Python untuk mengunduh model..."
5
  echo "=================================================="
6
 
7
+ # Jalankan skrip Python dari folder src
8
+ python src/download_models.py
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9
 
10
  echo "=================================================="
11
+ echo "Skrip setup selesai."
12
  echo "=================================================="
 
src/download_models.py ADDED
@@ -0,0 +1,49 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # src/download_models.py
2
+ import os
3
+ from huggingface_hub import snapshot_download
4
+
5
+ # Skrip ini akan dipanggil oleh setup.sh untuk mengunduh semua model
6
+ # menggunakan pustaka Python, yang seringkali lebih stabil.
7
+
8
+ # Path ke persistent storage di Hugging Face Spaces
9
+ MODEL_STORAGE_PATH = "/data/models"
10
+
11
+ # Daftar model yang akan diunduh
12
+ MODELS_TO_DOWNLOAD = {
13
+ "bert": "indobenchmark/indobert-base-p2",
14
+ "roberta": "cahya/roberta-base-indonesian-522M",
15
+ "electra": "google/electra-base-discriminator",
16
+ "xlnet": "xlnet-base-cased"
17
+ }
18
+
19
+ def main():
20
+ print("==================================================")
21
+ print("Memulai proses download model dengan skrip Python...")
22
+ print("==================================================")
23
+
24
+ for model_key, model_id in MODELS_TO_DOWNLOAD.items():
25
+ print(f"\n---> Mengunduh {model_key.upper()} ({model_id})")
26
+
27
+ # Tentukan direktori tujuan untuk model ini
28
+ local_dir_path = os.path.join(MODEL_STORAGE_PATH, model_key)
29
+
30
+ try:
31
+ # Unduh semua file dari repositori model ke direktori lokal
32
+ snapshot_download(
33
+ repo_id=model_id,
34
+ local_dir=local_dir_path,
35
+ local_dir_use_symlinks=False, # Penting untuk lingkungan Docker
36
+ resume_download=True # Akan melanjutkan unduhan jika terputus
37
+ )
38
+ print(f"---> {model_key.upper()} berhasil diunduh ke {local_dir_path}")
39
+ except Exception as e:
40
+ print(f"[ERROR] Gagal mengunduh {model_key.upper()}: {e}")
41
+ # Kita bisa memilih untuk melanjutkan atau berhenti. Mari kita lanjutkan.
42
+ pass
43
+
44
+ print("\n==================================================")
45
+ print("Proses download model selesai.")
46
+ print("==================================================")
47
+
48
+ if __name__ == "__main__":
49
+ main()