File size: 3,956 Bytes
141a818
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
# Dockerfile โ€” Hugging Face Spaces (Docker SDK) ไธ“็”จ
#
# ่ง„่Œƒ้ตๅฎˆ
# --------
# 1. ๆšด้œฒ็ซฏๅฃ 7860๏ผˆHF ๅ›บๅฎšๅ‰็ซฏ็ซฏๅฃ๏ผŒ็ฆๆญขไฝฟ็”จ 8501๏ผ‰
# 2. ้ž root ็”จๆˆท `user`๏ผˆUID=1000๏ผ‰๏ผŒ็ฌฆๅˆ HF ๅฎ‰ๅ…จ็ญ–็•ฅ
# 3. ๅฏๅŠจๅ‘ฝไปค๏ผšstreamlit run app.py --server.port=7860 --server.address=0.0.0.0
#
# ้•œๅƒไฝ“็งฏไผ˜ๅŒ–
# ------------
# torch CPU-only wheel (~700MB) ไปฃๆ›ฟๅฎŒๆ•ด GPU ็‰ˆๆœฌ (~3GB)
# Demo ไป…ๅšๆŽจ็†๏ผŒไธ้œ€่ฆ CUDA ๆ”ฏๆŒ
#
# ๆœฌๅœฐๆž„ๅปบๆต‹่ฏ•
# ------------
# docker build -t maze-dqn-demo .
# docker run -p 7860:7860 maze-dqn-demo
# ๆต่งˆๅ™จ่ฎฟ้—ฎ๏ผšhttp://localhost:7860

FROM python:3.10.14-slim

# โ”€โ”€ ็ณป็ปŸๅŸบ็ก€ไพ่ต– โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
RUN apt-get update && apt-get install -y --no-install-recommends \
        build-essential \
        git \
    && rm -rf /var/lib/apt/lists/*

# โ”€โ”€ ๅˆ›ๅปบ้ž root ็”จๆˆท๏ผˆHF ๅฎ‰ๅ…จ่ฆๆฑ‚๏ผšUID=1000๏ผ‰โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
RUN useradd -m -u 1000 user
WORKDIR /app

# โ”€โ”€ ๅ…ˆๅฎ‰่ฃ…ไพ่ต–๏ผˆๅˆฉ็”จ Docker layer cache๏ผŒไปฃ็ ๅ˜ๆ›ดไธ่งฆๅ‘้‡่ฃ…๏ผ‰โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
COPY --chown=user:user requirements.txt .
# ๅ…ˆๅ•็‹ฌๅฎ‰่ฃ… torch CPU-only wheel๏ผŒ้ฟๅ…้ป˜่ฎคๆ‹‰ๅ– GPU ็‰ˆๆœฌ๏ผˆ~3GB โ†’ ~700MB๏ผ‰
RUN pip install --no-cache-dir --upgrade pip \
 && pip install --no-cache-dir torch --index-url https://download.pytorch.org/whl/cpu \
 && pip install --no-cache-dir -r requirements.txt

# โ”€โ”€ ๆ‹ท่ดๅบ”็”จๆ ธๅฟƒๆ–‡ไปถ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
#   app.py                          Web ๅ‰็ซฏไธป็จ‹ๅบ
#   maze_env/                       Gymnasium ็ŽฏๅขƒๅŒ…๏ผˆๅซ bfs.py๏ผŒ้€š่ฟ‡ pip install ๅฎ‰่ฃ…๏ผ‰
#   src/model.py                    ็ฅž็ป็ฝ‘็ปœๆžถๆž„๏ผˆsys.path ๆณจๅ…ฅ src/ ๅŽๅฏผๅ…ฅ๏ผ‰
#   config.yaml                     ่ถ…ๅ‚ๆ•ฐ้…็ฝฎๆ–‡ไปถ๏ผˆapp.py ๅฏๅŠจๆ—ถ่ฏปๅ–๏ผ‰
#   results/best_model_train_*.pth  ๅ››็ฎ—ๆณ•่ฎญ็ปƒๆƒ้‡๏ผˆapp.py ๆŒ‰ algorithm ๅๅŠจๆ€ๅŠ ่ฝฝ๏ผ‰
#   pyproject.toml                  ๅŒ…ๅฎ‰่ฃ…ๆ่ฟฐ็ฌฆ๏ผˆpip install -e . ้œ€่ฆ๏ผ‰
COPY --chown=user:user app.py                          .
COPY --chown=user:user src/model.py                    src/model.py
COPY --chown=user:user maze_env/                       maze_env/
COPY --chown=user:user pyproject.toml                  .
COPY --chown=user:user config.yaml                     .
COPY --chown=user:user results/best_model_train_vanilla.pth        results/best_model_train_vanilla.pth
COPY --chown=user:user results/best_model_train_double.pth         results/best_model_train_double.pth
COPY --chown=user:user results/best_model_train_dueling.pth        results/best_model_train_dueling.pth
COPY --chown=user:user results/best_model_train_double_dueling.pth results/best_model_train_double_dueling.pth

# โ”€โ”€ ๅฎ‰่ฃ… maze_env ๅŒ…๏ผˆไฝฟ `from maze_env import ...` ็”Ÿๆ•ˆ๏ผ‰โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
RUN pip install --no-cache-dir -e .

# โ”€โ”€ ๅˆ‡ๆขๅˆฐ้ž root ็”จๆˆท โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
USER user

# โ”€โ”€ ๆšด้œฒ HF ไธ“็”จ็ซฏๅฃ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
EXPOSE 7860

# โ”€โ”€ ๅฏๅŠจๅ‘ฝไปค๏ผˆHF ่ง„่Œƒ๏ผšport=7860, address=0.0.0.0๏ผ‰โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
CMD ["streamlit", "run", "app.py", \
     "--server.port=7860", \
     "--server.address=0.0.0.0", \
     "--server.headless=true", \
     "--server.fileWatcherType=none"]