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
|