| # Dockerfile | |
| # Bước 1: Chọn base image | |
| # Sử dụng Miniconda làm base. Image này đã bao gồm Conda. | |
| FROM continuumio/miniconda3:latest | |
| # 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 | |
| ENV DEBIAN_FRONTEND=noninteractive | |
| # Bước 2: Thiết lập thư mục làm việc bên trong container | |
| WORKDIR /app | |
| # Bước 3: Sao chép file định nghĩa môi trường Conda | |
| # File environment.yml này nên được đặt cùng cấp với Dockerfile trong repo của bạn. | |
| COPY environment.yml . | |
| # (Tùy chọn, có thể bỏ qua nếu không cần thiết hoặc gây chậm) | |
| # Cập nhật conda lên phiên bản mới nhất trong môi trường base | |
| # RUN conda update -n base -c defaults conda -y | |
| # Bước 4: Tạo môi trường Conda từ file environment.yml | |
| # Tên môi trường "myapp-env" được lấy từ file environment.yml | |
| # 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. | |
| RUN echo "Bắt đầu tạo môi trường Conda từ environment.yml..." && \ | |
| conda env create -f environment.yml && \ | |
| conda clean -afy && \ | |
| echo "Hoàn tất tạo môi trường Conda." | |
| # 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 | |
| # Tên môi trường "myapp-env" phải khớp với tên trong environment.yml | |
| SHELL ["conda", "run", "-n", "myapp-env", "/bin/bash", "-c"] | |
| # Bước 6: Cài đặt/nâng cấp PyTorch, torchvision, torchaudio với GPU (nhắm đến CUDA 11.8) | |
| # QUAN TRỌNG: HÃY KIỂM TRA VÀ SỬ DỤNG PHIÊN BẢN torch, torchvision, torchaudio | |
| # THỰC TẾ CÓ SẴN cho cu118 và Python 3.11 (cp311) TẠI https://download.pytorch.org/whl/cu118 | |
| # Ví dụ dưới đây sử dụng torch 2.3.1, torchvision 0.18.1, torchaudio 2.3.1. | |
| # 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. | |
| RUN echo "Bắt đầu cài đặt/nâng cấp PyTorch, torchvision, torchaudio với GPU (CUDA 11.8)..." && \ | |
| pip install --no-cache-dir --upgrade \ | |
| torch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 \ | |
| --extra-index-url https://download.pytorch.org/whl/cu118 && \ | |
| echo "Đã cài đặt/nâng cấp PyTorch, torchvision, torchaudio cho cu118." | |
| # Bước 7: Bước xác thực cài đặt (RẤT QUAN TRỌNG để gỡ lỗi trên Spaces) | |
| RUN echo "--- KIỂM TRA MÔI TRƯỜNG SAU KHI CÀI ĐẶT ---" && \ | |
| echo "Kiến trúc hệ thống:" && uname -m && \ | |
| echo "Đường dẫn Conda:" && which conda && \ | |
| echo "Đường dẫn Python:" && which python && \ | |
| echo "Phiên bản Python:" && python --version && \ | |
| 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." && \ | |
| echo "--- Thông tin PyTorch: ---" && \ | |
| 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()}')" && \ | |
| echo "--- Thông tin Faiss: ---" && \ | |
| python -c "import faiss; print(f'Faiss version: {faiss.__version__}'); print(f'Number of GPUs available to Faiss: {faiss.get_num_gpus()}')" && \ | |
| echo "--- Danh sách một số gói pip quan trọng: ---" && \ | |
| pip list | grep -E 'gradio|torch|faiss|unsloth|sentence-transformers|transformers|numpy|rank_bm25|huggingface_hub' && \ | |
| echo "--- KẾT THÚC KIỂM TRA MÔI TRƯỜNG ---" | |
| # Bước 8: Sao chép toàn bộ code ứng dụng của bạn (app.py, retrieval.py, v.v.) | |
| # và các thư mục con (data/, models/ - nếu bạn tải model lên trực tiếp) | |
| # vào thư mục /app bên trong container. | |
| # Hãy tạo file .dockerignore để loại bỏ các file không cần thiết. | |
| COPY . . | |
| # 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 | |
| # Ví dụ: | |
| # ENV HF_HOME="/app/huggingface_cache" # Để cache model của Hugging Face vào một thư mục cụ thể | |
| # ENV GRADIO_SERVER_NAME="0.0.0.0" | |
| # ENV GRADIO_SERVER_PORT="7860" | |
| # Bước 10: Thiết lập lệnh mặc định để chạy ứng dụng của bạn | |
| # Sử dụng "conda run" để đảm bảo ứng dụng chạy trong môi trường Conda đã được kích hoạt. | |
| CMD ["conda", "run", "-n", "myapp-env", "python", "app.py"] |