File size: 4,704 Bytes
25950e2
 
 
79d0162
25950e2
79d0162
 
25950e2
4b0b556
79d0162
25950e2
4b0b556
 
79d0162
25950e2
 
79d0162
 
 
25950e2
79d0162
 
 
 
 
 
 
4b0b556
79d0162
 
 
25950e2
79d0162
 
 
 
 
 
 
 
 
 
25950e2
79d0162
25950e2
4030384
25950e2
 
 
79d0162
25950e2
2b9c9f4
25950e2
 
 
 
 
 
 
 
 
79d0162
25950e2
 
 
 
79d0162
 
 
25950e2
 
79d0162
98653b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
# 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"]