| # 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"] | |