commit
Browse files- Dockerfile +35 -19
- environment.yml +23 -18
Dockerfile
CHANGED
@@ -1,37 +1,53 @@
|
|
1 |
# Dockerfile
|
2 |
|
3 |
# Bước 1: Chọn base image
|
|
|
4 |
FROM continuumio/miniconda3:latest
|
|
|
|
|
5 |
ENV DEBIAN_FRONTEND=noninteractive
|
6 |
|
7 |
-
# Bước 2: Thiết lập thư mục làm việc
|
8 |
WORKDIR /app
|
9 |
|
10 |
# Bước 3: Sao chép file định nghĩa môi trường Conda
|
|
|
11 |
COPY environment.yml .
|
12 |
|
13 |
-
#
|
14 |
-
|
15 |
-
|
16 |
-
# Bước 4: Tạo môi trường Conda bằng mamba
|
17 |
-
RUN mamba env create -f environment.yml && \
|
18 |
-
conda clean -afy
|
19 |
|
20 |
-
# Bước
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
#
|
24 |
-
#
|
25 |
-
|
26 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
27 |
|
28 |
-
# Bước 7:
|
29 |
-
# Output ở đây sẽ cho bạn biết PyTorch có nhận CUDA 11.8 không.
|
30 |
RUN echo "--- KIỂM TRA MÔI TRƯỜNG SAU KHI CÀI ĐẶT ---" && \
|
31 |
echo "Kiến trúc hệ thống:" && uname -m && \
|
32 |
echo "Đường dẫn Conda:" && which conda && \
|
33 |
echo "Đường dẫn Python:" && which python && \
|
34 |
echo "Phiên bản Python:" && python --version && \
|
|
|
35 |
echo "--- Thông tin PyTorch: ---" && \
|
36 |
python -c "import torch; print(f'PyTorch version: {torch.__version__}'); print(f'CUDA available for PyTorch: {torch.cuda.is_available()}'); print(f'PyTorch built with CUDA version: {torch.version.cuda if torch.cuda.is_available() else \"N/A\"}'); print(f'cuDNN version: {torch.backends.cudnn.version() if torch.cuda.is_available() and torch.backends.cudnn.is_available() else \"N/A\"}'); print(f'Number of GPUs available to PyTorch: {torch.cuda.device_count()}')" && \
|
37 |
echo "--- Thông tin Faiss: ---" && \
|
@@ -43,15 +59,15 @@ RUN echo "--- KIỂM TRA MÔI TRƯỜNG SAU KHI CÀI ĐẶT ---" && \
|
|
43 |
# Bước 8: Sao chép toàn bộ code ứng dụng của bạn (app.py, retrieval.py, v.v.)
|
44 |
# và các thư mục con (data/, models/ - nếu bạn tải model lên trực tiếp)
|
45 |
# vào thư mục /app bên trong container.
|
46 |
-
# Hãy tạo file .dockerignore để loại bỏ các file không cần thiết
|
47 |
COPY . .
|
48 |
|
49 |
# Bước 9: (Tùy chọn) Thiết lập các biến môi trường mà ứng dụng của bạn có thể cần
|
50 |
# Ví dụ:
|
51 |
-
# ENV
|
52 |
-
# ENV GRADIO_SERVER_NAME="0.0.0.0"
|
53 |
-
# ENV GRADIO_SERVER_PORT="7860"
|
54 |
|
55 |
# Bước 10: Thiết lập lệnh mặc định để chạy ứng dụng của bạn
|
56 |
-
#
|
57 |
CMD ["conda", "run", "-n", "myapp-env", "python", "app.py"]
|
|
|
1 |
# Dockerfile
|
2 |
|
3 |
# Bước 1: Chọn base image
|
4 |
+
# Sử dụng Miniconda làm base. Image này đã bao gồm Conda.
|
5 |
FROM continuumio/miniconda3:latest
|
6 |
+
|
7 |
+
# Thiết lập biến môi trường để tránh các prompt tương tác không cần thiết
|
8 |
ENV DEBIAN_FRONTEND=noninteractive
|
9 |
|
10 |
+
# Bước 2: Thiết lập thư mục làm việc bên trong container
|
11 |
WORKDIR /app
|
12 |
|
13 |
# Bước 3: Sao chép file định nghĩa môi trường Conda
|
14 |
+
# File environment.yml này nên được đặt cùng cấp với Dockerfile trong repo của bạn.
|
15 |
COPY environment.yml .
|
16 |
|
17 |
+
# (Tùy chọn, có thể bỏ qua nếu không cần thiết hoặc gây chậm)
|
18 |
+
# Cập nhật conda lên phiên bản mới nhất trong môi trường base
|
19 |
+
# RUN conda update -n base -c defaults conda -y
|
|
|
|
|
|
|
20 |
|
21 |
+
# Bước 4: Tạo môi trường Conda từ file environment.yml
|
22 |
+
# Tên môi trường "myapp-env" được lấy từ file environment.yml
|
23 |
+
# Lệnh `conda clean -afy` sẽ dọn dẹp cache sau khi tạo môi trường để giảm kích thước image.
|
24 |
+
RUN echo "Bắt đầu tạo môi trường Conda từ environment.yml..." && \
|
25 |
+
conda env create -f environment.yml && \
|
26 |
+
conda clean -afy && \
|
27 |
+
echo "Hoàn tất tạo môi trường Conda."
|
28 |
|
29 |
+
# Bước 5: Kích hoạt môi trường Conda cho tất cả các lệnh RUN, CMD, ENTRYPOINT tiếp theo
|
30 |
+
# Tên môi trường "myapp-env" phải khớp với tên trong environment.yml
|
31 |
+
SHELL ["conda", "run", "-n", "myapp-env", "/bin/bash", "-c"]
|
32 |
|
33 |
+
# Bước 6: Cài đặt/nâng cấp PyTorch, torchvision, torchaudio với GPU (nhắm đến CUDA 11.8)
|
34 |
+
# QUAN TRỌNG: HÃY KIỂM TRA VÀ SỬ DỤNG PHIÊN BẢN torch, torchvision, torchaudio
|
35 |
+
# THỰC TẾ CÓ SẴN cho cu118 và Python 3.11 (cp311) TẠI https://download.pytorch.org/whl/cu118
|
36 |
+
# Ví dụ dưới đây sử dụng torch 2.3.1, torchvision 0.18.1, torchaudio 2.3.1.
|
37 |
+
# THAY THẾ NẾU BẠN TÌM THẤY PHIÊN BẢN PHÙ HỢP HƠN HOẶC MỚI HƠN.
|
38 |
+
RUN echo "Bắt đầu cài đặt/nâng cấp PyTorch, torchvision, torchaudio với GPU (CUDA 11.8)..." && \
|
39 |
+
pip install --no-cache-dir --upgrade \
|
40 |
+
torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 \
|
41 |
+
--extra-index-url https://download.pytorch.org/whl/cu118 && \
|
42 |
+
echo "Đã cài đặt/nâng cấp PyTorch, torchvision, torchaudio cho cu118."
|
43 |
|
44 |
+
# Bước 7: Bước xác thực cài đặt (RẤT QUAN TRỌNG để gỡ lỗi trên Spaces)
|
|
|
45 |
RUN echo "--- KIỂM TRA MÔI TRƯỜNG SAU KHI CÀI ĐẶT ---" && \
|
46 |
echo "Kiến trúc hệ thống:" && uname -m && \
|
47 |
echo "Đường dẫn Conda:" && which conda && \
|
48 |
echo "Đường dẫn Python:" && which python && \
|
49 |
echo "Phiên bản Python:" && python --version && \
|
50 |
+
echo "NVIDIA SMI (nếu có và cudatoolkit được cài đúng):" && nvidia-smi || echo "nvidia-smi không khả dụng hoặc có lỗi." && \
|
51 |
echo "--- Thông tin PyTorch: ---" && \
|
52 |
python -c "import torch; print(f'PyTorch version: {torch.__version__}'); print(f'CUDA available for PyTorch: {torch.cuda.is_available()}'); print(f'PyTorch built with CUDA version: {torch.version.cuda if torch.cuda.is_available() else \"N/A\"}'); print(f'cuDNN version: {torch.backends.cudnn.version() if torch.cuda.is_available() and torch.backends.cudnn.is_available() else \"N/A\"}'); print(f'Number of GPUs available to PyTorch: {torch.cuda.device_count()}')" && \
|
53 |
echo "--- Thông tin Faiss: ---" && \
|
|
|
59 |
# Bước 8: Sao chép toàn bộ code ứng dụng của bạn (app.py, retrieval.py, v.v.)
|
60 |
# và các thư mục con (data/, models/ - nếu bạn tải model lên trực tiếp)
|
61 |
# vào thư mục /app bên trong container.
|
62 |
+
# Hãy tạo file .dockerignore để loại bỏ các file không cần thiết.
|
63 |
COPY . .
|
64 |
|
65 |
# Bước 9: (Tùy chọn) Thiết lập các biến môi trường mà ứng dụng của bạn có thể cần
|
66 |
# Ví dụ:
|
67 |
+
# ENV HF_HOME="/app/huggingface_cache" # Để cache model của Hugging Face vào một thư mục cụ thể
|
68 |
+
# ENV GRADIO_SERVER_NAME="0.0.0.0"
|
69 |
+
# ENV GRADIO_SERVER_PORT="7860"
|
70 |
|
71 |
# Bước 10: Thiết lập lệnh mặc định để chạy ứng dụng của bạn
|
72 |
+
# Sử dụng "conda run" để đảm bảo ứng dụng chạy trong môi trường Conda đã được kích hoạt.
|
73 |
CMD ["conda", "run", "-n", "myapp-env", "python", "app.py"]
|
environment.yml
CHANGED
@@ -1,26 +1,31 @@
|
|
1 |
# environment.yml
|
2 |
-
name: myapp-env
|
3 |
channels:
|
4 |
-
- nvidia
|
5 |
-
- pytorch
|
6 |
-
- conda-forge
|
7 |
- defaults
|
8 |
dependencies:
|
9 |
-
- python=3.11.12
|
10 |
-
|
11 |
-
|
12 |
-
#
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
-
|
|
|
|
|
17 |
- pytorch::torchvision-cpu
|
18 |
- pytorch::torchaudio-cpu
|
|
|
19 |
- pip
|
20 |
- pip:
|
21 |
-
- gradio
|
22 |
-
- sentence-transformers
|
23 |
-
- unsloth
|
24 |
-
- transformers
|
25 |
-
- rank_bm25
|
26 |
-
- huggingface_hub
|
|
|
|
|
|
1 |
# environment.yml
|
2 |
+
name: myapp-env # Hoặc tên môi trường của bạn
|
3 |
channels:
|
4 |
+
- nvidia # Channel chính cho cudatoolkit
|
5 |
+
- pytorch # Kênh cho faiss-gpu và pytorch-cpu (làm nền)
|
6 |
+
- conda-forge # Cho các gói khác
|
7 |
- defaults
|
8 |
dependencies:
|
9 |
+
- python=3.11.12 # Hoặc phiên bản Python của bạn
|
10 |
+
# --- CUDA Toolkit và các gói Conda chính ---
|
11 |
+
- nvidia::cudatoolkit==11.8 # Yêu cầu CUDA 11.8
|
12 |
+
# Yêu cầu faiss-gpu. Conda sẽ cố gắng tìm bản build tương thích.
|
13 |
+
# Ví dụ: pytorch::faiss-gpu=1.8.0 (nếu bạn biết phiên bản cụ thể cho py311, cuda11.8)
|
14 |
+
# Hoặc conda-forge::faiss-gpu (thường ổn định)
|
15 |
+
- conda-forge::faiss-gpu
|
16 |
+
- numpy=1.26.4 # Ghim NumPy < 2.0 để tương thích với Faiss
|
17 |
+
# Các gói PyTorch CPU làm nền (sẽ được ghi đè bởi bản GPU từ pip)
|
18 |
+
- pytorch::pytorch-cpu
|
19 |
- pytorch::torchvision-cpu
|
20 |
- pytorch::torchaudio-cpu
|
21 |
+
# --- Các gói Pip ---
|
22 |
- pip
|
23 |
- pip:
|
24 |
+
- gradio
|
25 |
+
- sentence-transformers
|
26 |
+
- unsloth
|
27 |
+
- transformers
|
28 |
+
- rank_bm25
|
29 |
+
- huggingface_hub
|
30 |
+
# KHÔNG có torch, torchvision, torchaudio, numpy ở đây
|
31 |
+
# ... các gói pip khác nếu cần
|