https://github.com/pathcosmos/machine-setting
Portable AI development environment system
https://github.com/pathcosmos/machine-setting
Last synced: 21 days ago
JSON representation
Portable AI development environment system
- Host: GitHub
- URL: https://github.com/pathcosmos/machine-setting
- Owner: pathcosmos
- Created: 2026-03-04T08:24:54.000Z (4 months ago)
- Default Branch: main
- Last Pushed: 2026-04-07T07:12:30.000Z (2 months ago)
- Last Synced: 2026-04-07T09:13:46.499Z (2 months ago)
- Language: Shell
- Size: 244 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Machine Setting
> ๐ [English](README_EN.md) | **ํ๊ตญ์ด**
Portable AI development environment system. One command to set up Python + AI/ML packages + optional Node.js/Java on any machine, with automatic GPU/CPU detection and cross-machine sync.
**Supported platforms**: Linux (x86_64, NVIDIA CUDA) + macOS (Apple Silicon M1+, MPS) + Cloud/Container (Docker, K8s, AWS/GCP/Azure)
**Supported shells**: bash + zsh
---
## Table of Contents
- [Quick Start](#quick-start)
- [How It Works](#how-it-works)
- [Installation Flow](#installation-flow)
- [Installed Components](#installed-components)
- [Daily Usage](#daily-usage)
- [CLI Options](#cli-options)
- [Profiles](#profiles)
- [GPU Support](#gpu-support)
- [Pre-flight Check](#pre-flight-check)
- [Reinstallation](#reinstallation)
- [Uninstall](#uninstall)
- [Health Check & Recovery](#health-check--recovery)
- [Cross-Machine Sync](#cross-machine-sync)
- [Disk Health & Monitoring](#disk-health--monitoring)
- [Shell Integration Details](#shell-integration-details)
- [Directory Structure](#directory-structure)
- [State & Configuration Files](#state--configuration-files)
- [Troubleshooting](#troubleshooting)
- [Security](#security)
---
## Quick Start
```bash
# New machine setup (Linux or macOS)
git clone https://github.com/pathcosmos/machine-setting.git ~/machine_setting
cd ~/machine_setting && ./setup.sh
# Cloud/container setup (sudo ์์ด user-space๋ง ์ค์น)
./setup.sh --cloud
# Activate AI environment
aienv
```
---
## How It Works
### Overview
`setup.sh`๋ 7๋จ๊ณ ํ์ดํ๋ผ์ธ์ผ๋ก ๋์ํ๋ฉฐ, ๊ฐ ๋จ๊ณ๋ **์ฒดํฌํฌ์ธํธ ์์คํ
**์ผ๋ก ์ํ๊ฐ ์ถ์ ๋ฉ๋๋ค. ์ค์น๊ฐ ์ค๊ฐ์ ์คํจํด๋ ์๋ฃ๋ ๋จ๊ณ๋ฅผ ๊ฑด๋๋ฐ๊ณ ์คํจ ์ง์ ๋ถํฐ ์ฌ๊ฐํ ์ ์์ต๋๋ค.
### Execution Flow
```
./setup.sh ์คํ
โ
โโ 1) Pre-flight Check (interactive ๋ชจ๋)
โ ํ์ฌ ์์คํ
์ํ๋ฅผ ์ค์บํ๊ณ ์ด๋ค ์์
์ด ํ์ํ์ง ํ์
โ ์ฌ์ฉ์๊ฐ ์ค์น ํญ๋ชฉ์ ์ ํ/ํด์ ๊ฐ๋ฅ
โ
โโ 2) ์ด์ ์ค์น ์ํ ํ์ธ
โ ~/.machine_setting/install.state ํ์ผ์์ ์ด์ ์งํ ์ํ ์ฝ๊ธฐ
โ โ ์ด์ ์คํจ ์์ผ๋ฉด: Resume / Reset / Cancel ๋ฉ๋ด ํ์
โ โ ๋ชจ๋ ์๋ฃ ์ํ๋ฉด: Reinstall / Cancel ๋ฉ๋ด ํ์
โ
โโ 3) 7๋จ๊ณ ์ค์น ํ์ดํ๋ผ์ธ ์คํ
๊ฐ ๋จ๊ณ๋ง๋ค checkpoint ๊ธฐ๋ก โ ์คํจ ์ ์๋ rollback
```
### Checkpoint System
๋ชจ๋ ์ค์น ์ํ๋ `~/.machine_setting/install.state`์ ๊ธฐ๋ก๋ฉ๋๋ค:
```
STAGE_1_HARDWARE=done
STAGE_2_NVIDIA=done
STAGE_3_PYTHON=done
STAGE_4_VENV=in_progress โ ์ด ๋จ๊ณ์์ ์คํจ
STAGE_5_NODE=pending
STAGE_6_JAVA=pending
STAGE_7_SHELL=pending
```
๊ฐ ๋จ๊ณ๊ฐ ์คํจํ๋ฉด:
1. ํด๋น ๋จ๊ณ์ ์ํ๋ฅผ `failed`๋ก ๊ธฐ๋ก
2. **์๋ ๋กค๋ฐฑ** ์คํ (ํด๋น ๋จ๊ณ์์ ์ค์นํ ๊ฒ๋ค ์ ๊ฑฐ)
3. ๋ค์ ์คํ ์ ์คํจ ์ง์ ๋ถํฐ ์ฌ๊ฐ ๊ฐ๋ฅ
---
## Installation Flow
### [1/7] Hardware Detection
์์คํ
ํ๋์จ์ด๋ฅผ ์๋ ๊ฐ์งํ์ฌ `~/.machine_setting_profile`์ ์ ์ฅํฉ๋๋ค.
| ๊ฐ์ง ํญ๋ชฉ | Linux | macOS |
|-----------|-------|-------|
| GPU | `lspci` + `nvidia-smi` (fallback) | `system_profiler` (Apple Silicon) |
| CUDA ๋ฒ์ | `nvcc --version` / `nvidia-smi` | N/A (MPS ์ฌ์ฉ) |
| CPU/RAM | `/proc/cpuinfo`, `/proc/meminfo` | `sysctl` |
| NGC ์ปจํ
์ด๋ | torch NV ๋ฒ์ ์ฒดํฌ + `/opt/nvidia` ์กด์ฌ | N/A |
| Cloud/Container | Docker, K8s, cgroup, ํด๋ผ์ฐ๋ VM ๋ฒค๋, sudo ๊ฐ์ฉ์ฑ | N/A |
> **์ปจํ
์ด๋ GPU ๊ฐ์ง:** `lspci`๊ฐ ์๋ ์ปจํ
์ด๋์์๋ `nvidia-smi` fallback์ผ๋ก GPU๋ฅผ ์ ์ ๊ฐ์งํฉ๋๋ค.
๊ฐ์ง ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ์ต์ ํ๋กํ์ด ์๋ ์ ํ๋ฉ๋๋ค:
- Apple Silicon โ `mac-apple-silicon`
- NGC ์ปจํ
์ด๋ โ `ngc-container`
- Cloud/Container ํ๊ฒฝ โ `cloud-server`
- NVIDIA GPU โ `gpu-workstation`
- RAM โฅ 32GB (GPU ์์) โ `cpu-server`
- RAM โฅ 8GB โ `laptop`
- ๊ทธ ์ธ โ `minimal`
### [2/7] NVIDIA GPU Stack (Linux ์ ์ฉ)
์์คํ
๋ ๋ฒจ NVIDIA GPU ์ํํธ์จ์ด ์คํ์ ์๋์ผ๋ก ์ค์นํฉ๋๋ค. `scripts/install-nvidia.sh`๊ฐ 9๊ฐ ์๋ธ ์คํ
์ด์ง๋ฅผ ์คํํฉ๋๋ค.
**์๋ ์คํต ์กฐ๊ฑด:** ๋น-Linux OS, NVIDIA GPU ๋ฏธ๊ฐ์ง, NGC ์ปจํ
์ด๋ (์ด๋ฏธ ์ค์น๋จ), `INSTALL_NVIDIA=false`
**GPU ํฐ์ด ์๋ ๋ถ๋ฅ:**
| ํฐ์ด | GPU ์์ | ๋์ |
|------|----------|------|
| Consumer | GeForce RTX 3090/4090 | ๊ธฐ๋ณธ ์ค์น (๋๋ผ์ด๋ฒ + CUDA + cuDNN + NCCL) |
| Professional | RTX A6000, L40 | ๊ธฐ๋ณธ ์ค์น |
| Datacenter | A100, H100, H200, B200 | ๊ธฐ๋ณธ + ์ํฐํ๋ผ์ด์ฆ ๋๊ตฌ ์๋ ํ์ฑํ |
**์ค์น ๊ตฌ์ฑ์์:**
| ๊ตฌ์ฑ์์ | ์ค๋ช
| ์ค์ |
|----------|------|------|
| NVIDIA Driver | `ubuntu-drivers` ์๋ ์ถ์ฒ ๋๋ ์๋ ๋ฒ์ ์ง์ | `NVIDIA_DRIVER_VERSION` |
| CUDA Toolkit | `cuda-toolkit` ๋ฉํํจํค์ง, `/usr/local/cuda` ์ฌ๋ณผ๋ฆญ ๋งํฌ | `NVIDIA_CUDA_VERSION` |
| cuDNN 9.x | DNN ๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ (`cudnn9-cuda-XX`) | ์๋ |
| NCCL | ๋ฉํฐ GPU ์งํฉ ํต์ (๋จ์ผ GPU๋ฉด ์คํต) | ์๋ |
| Container Toolkit | Docker GPU ์ง์ (Docker ๋ฏธ์ค์น ์ ์คํต) | `NVIDIA_CONTAINER_TOOLKIT` |
| Enterprise Tools | DCGM, Fabric Manager, GDS, nvidia-peermem | `NVIDIA_ENTERPRISE` |
| System Utilities | numactl, hwloc, nvtop, lm-sensors, build-essential, cmake | `NVIDIA_SYSTEM_TOOLS` |
| Kernel Tuning | sysctl (vm.max_map_count, shmmax ๋ฑ), memlock limits, CPU governor | `NVIDIA_KERNEL_TUNING` |
**Open vs Proprietary Kernel Modules:**
- `NVIDIA_OPEN_KERNEL=auto` (๊ธฐ๋ณธ): Turing+ (RTX 20xx ์ด์) โ open, ๊ตฌํ โ proprietary
- `NVIDIA_OPEN_KERNEL=true`: ๊ฐ์ open ์ปค๋ ๋ชจ๋
- `NVIDIA_OPEN_KERNEL=false`: ๊ฐ์ proprietary ์ปค๋ ๋ชจ๋
**Secure Boot:** MOK (Machine Owner Key) ๋ฑ๋ก ์๋ด๊ฐ ์๋์ผ๋ก ํ์๋ฉ๋๋ค.
**์ปค๋ ํ๋ ์์ธ:**
- `vm.max_map_count=1048576` (๋๊ท๋ชจ ๋ฉ๋ชจ๋ฆฌ ๋งคํ)
- RAM ๊ธฐ๋ฐ ๋์ `shmmax`/`shmall` ๊ณ์ฐ
- `memlock unlimited` (GPU ๋ฉ๋ชจ๋ฆฌ ์ ๊ธ)
- TCP ๋ฒํผ ์ต์ ํ (๋ถ์ฐ ํ์ต์ฉ)
- CPU governor โ performance
### [3/7] Python Setup
[uv](https://github.com/astral-sh/uv)๋ฅผ ํตํด Python์ ์ค์นํฉ๋๋ค (๊ธฐ๋ณธ: 3.12).
- uv๊ฐ ์์ผ๋ฉด ์๋ ์ค์น (`curl -LsSf https://astral.sh/uv/install.sh | sh`)
- `uv python install 3.12` ์ผ๋ก ๊ด๋ฆฌํ Python ์ค์น
- ์์คํ
Python์ ์ํฅ ์์
### [4/7] AI Environment (Virtual Environment + Packages)
venv ์์ฑ ํ ํจํค์ง ๊ทธ๋ฃน๋ณ๋ก ์ค์นํฉ๋๋ค.
**venv ์์น ์ต์
:**
| ๋ชจ๋ | ๊ฒฝ๋ก | ์ฉ๋ |
|------|------|------|
| global (๊ธฐ๋ณธ) | `~/ai-env` | ๋ชจ๋ ํ๋ก์ ํธ์์ ๊ณต์ |
| local | `./.venv` | ํ์ฌ ํ๋ก์ ํธ ์ ์ฉ |
| custom | ์ฌ์ฉ์ ์ง์ ๊ฒฝ๋ก | ํน์ ํํฐ์
๋ฑ |
**ํจํค์ง ๊ทธ๋ฃน:**
| ๊ทธ๋ฃน | ํ์ผ | ๋ด์ฉ |
|------|------|------|
| core | `requirements-core.txt` | transformers, accelerate, peft, wandb, numpy, mlflow, tensorboard, optuna ๋ฑ |
| data | `requirements-data.txt` | pandas, polars, duckdb, SQLAlchemy, psycopg2, pypdf, openpyxl ๋ฑ |
| web | `requirements-web.txt` | fastapi, uvicorn, httpx, gradio, cryptography ๋ฑ |
| gpu | `requirements-gpu.txt` | torch+CUDA, triton, bitsandbytes, deepspeed, vllm, pynvml, nvitop ๋ฑ |
| mps | `requirements-mps.txt` | torch (Apple Silicon MPS ํฌํจ) |
| cpu | `requirements-cpu.txt` | torch CPU-only ๋น๋ |
GPU/MPS/CPU ํจํค์ง๋ [1/7]์์ ๊ฐ์ง๋ ํ๋์จ์ด์ ๋ฐ๋ผ ์๋์ผ๋ก ํ๋๋ง ์ ํ๋ฉ๋๋ค.
**๋์คํฌ ์๊ตฌ์ฌํญ:** ์ต์ 15GB ์ฌ์ ๊ณต๊ฐ ๊ถ์ฅ (GPU ํจํค์ง ํฌํจ ์)
#### core โ ํต์ฌ AI/ML (`requirements-core.txt`, ~160๊ฐ)
| ์นดํ
๊ณ ๋ฆฌ | ํจํค์ง | ์ค๋ช
|
|----------|--------|------|
| **LLM Provider** | `anthropic`, `openai`, `google-generativeai` + Google API 7๊ฐ | Claude, GPT, Gemini API |
| **LangChain** | `langchain`, `langchain-community`, `langchain-core`, `langchain-huggingface`, `langgraph`, `langgraph-checkpoint`, `langgraph-prebuilt`, `langgraph-sdk`, `langsmith` | ์์ด์ ํธ/์ฒด์ธ/๊ทธ๋ํ |
| **HuggingFace** | `transformers`, `datasets`, `tokenizers`, `huggingface_hub`, `accelerate`, `peft`, `trl`, `sentence-transformers`, `safetensors`, `hf-xet`, `sentencepiece` | ๋ชจ๋ธ ํ์ต/์ถ๋ก /ํ์ธํ๋ |
| **Classical ML** | `scikit-learn`, `scipy`, `xgboost`, `lightgbm`, `numba`, `llvmlite` | ์ ํต ๋จธ์ ๋ฌ๋ |
| **Vector/Embedding** | `chromadb`, `faiss-cpu` | ๋ฒกํฐ DB/์ ์ฌ๋ ๊ฒ์ |
| **Visualization** | `matplotlib`, `seaborn`, `contourpy`, `cycler`, `fonttools`, `kiwisolver` | ์ฐจํธ/๊ทธ๋ํ |
| **์คํ ๊ด๋ฆฌ** | `wandb`, `mlflow`, `tensorboard`, `optuna` | ์คํ ์ถ์ /ํ์ดํผํ๋ผ๋ฏธํฐ ์ต์ ํ |
| **๊ณผํ ๊ณ์ฐ** | `sympy`, `mpmath`, `networkx`, `shapely`, `h5py` | ์ํ/๊ทธ๋ํ/์ง๋ฆฌ/HDF5 |
| **์ค๋์ค** | `pydub`, `ffmpy` | ์ค๋์ค ์ฒ๋ฆฌ/๋ณํ |
| **Testing** | `pytest`, `pytest-asyncio` | ๋จ์/๋น๋๊ธฐ ํ
์คํธ |
| **NLP/ํ
์คํธ** | `regex`, `python-bidi`, `Markdown`, `markdown-it-py`, `rich`, `Pygments` | ํ
์คํธ ์ฒ๋ฆฌ/๋ ๋๋ง |
| **Utilities** | `pydantic`, `pydantic-settings`, `python-dotenv`, `click`, `typer`, `loguru`, `structlog`, `tqdm`, `coloredlogs`, `humanfriendly`, `prettytable`, `py-cpuinfo`, `tenacity`, `backoff` | ์ค์ /CLI/๋ก๊น
/์ฌ์๋ |
| **Async** | `anyio`, `aiofiles`, `aiohappyeyeballs`, `aiosignal`, `frozenlist`, `multidict`, `yarl` | ๋น๋๊ธฐ IO |
| **Serialization** | `typing_extensions`, `marshmallow`, `dataclasses-json`, `jsonschema`, `jsonpatch`, `PyYAML`, `ruamel.yaml` | ์คํค๋ง/์ง๋ ฌํ(YAML ์ฃผ์ ๋ณด์กด) |
| **gRPC/Protobuf** | `grpcio`, `grpcio-status`, `proto-plus`, `protobuf` | RPC ํต์ |
| **Monitoring** | `opentelemetry-api`, `opentelemetry-sdk`, `opentelemetry-exporter-otlp-proto-grpc` + 3๊ฐ, `posthog` | ํ
๋ ๋ฉํธ๋ฆฌ/๋ถ์ |
| **Infra** | `kubernetes`, `GitPython`, `APScheduler`, `psutil`, `watchdog` | K8s/Git/์ค์ผ์ค๋ง |
| **Build** | `packaging`, `setuptools`, `wheel`, `build`, `ninja` | ํจํค์ง ๋น๋ |
#### gpu โ NVIDIA GPU ์ ์ฉ (`requirements-gpu.txt`, ~15๊ฐ)
| ์นดํ
๊ณ ๋ฆฌ | ํจํค์ง | ์ค๋ช
|
|----------|--------|------|
| **PyTorch** | `torch`, `torchaudio`, `torchvision`, `triton` | CUDA index URL๋ก GPU ๋น๋ ์ค์น |
| **CUDA Bindings** | `cuda-bindings`, `cuda-pathfinder` | CUDA Python ๋ฐ์ธ๋ฉ |
| **GPU ๊ฐ์** | `flash-attn`, `bitsandbytes`, `onnxruntime-gpu` | FlashAttention/์์ํ/GPU ์ถ๋ก |
| **๋ถ์ฐ ํ์ต** | `deepspeed`, `pytorch-lightning`, `torchmetrics` | ๋ฉํฐ GPU ํ์ต |
| **GPU ๋ชจ๋ํฐ๋ง** | `pynvml`, `gpustat`, `nvitop` | GPU ์ฌ์ฉ๋/์จ๋ ๋ชจ๋ํฐ๋ง |
| **์ถ๋ก ์ต์ ํ** | `vllm`, `optimum` | LLM ๊ณ ์ ์๋น/๋ชจ๋ธ ์ต์ ํ |
> **์ฐธ๊ณ :** `nvidia-*` ๋ฐํ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ `torch` ์์กด์ฑ์ผ๋ก ์๋ ํด์๋๋ฏ๋ก ๋ชฉ๋ก์ ๋ฏธํฌํจ. ๊ณ ์ ํ๋ฉด CUDA ๋ฒ์ ๊ฐ ํธํ์ฑ์ด ๊นจ์ง ์ ์์.
#### data โ ๋ฐ์ดํฐ ์ฒ๋ฆฌ (`requirements-data.txt`, ~40๊ฐ)
| ์นดํ
๊ณ ๋ฆฌ | ํจํค์ง | ์ค๋ช
|
|----------|--------|------|
| **DataFrame** | `pandas`, `pyarrow`, `numpy`, `polars`, `duckdb`, `connectorx` | ๋ฐ์ดํฐ ๋ถ์/์ฟผ๋ฆฌ ์์ง |
| **DB ๋๋ผ์ด๋ฒ** | `SQLAlchemy`, `alembic`, `psycopg2-binary`, `PyMySQL`, `oracledb`, `cx-Oracle`, `clickhouse-connect`, `clickhouse-driver` | PostgreSQL/MySQL/Oracle/ClickHouse |
| **๋ฌธ์ ์ฒ๋ฆฌ** | `pdfplumber`, `pdfminer.six`, `pypdf`, `pypdfium2`, `python-docx`, `python-pptx`, `openpyxl`, `xlsxwriter`, `lxml` | PDF/Word/Excel/PPT ํ์ฑ |
| **์ด๋ฏธ์ง** | `pillow`, `opencv-python`, `opencv-python-headless`, `scikit-image`, `ImageIO` | ์ด๋ฏธ์ง ์ฒ๋ฆฌ/CV |
| **OCR** | `easyocr`, `pytesseract` | ๊ดํ ๋ฌธ์ ์ธ์ |
| **์คํฌ๋ํ** | `beautifulsoup4` | HTML ํ์ฑ/์น ์คํฌ๋ํ |
| **ํต๊ณ/์ค๋ช
** | `statsmodels`, `shap` | ํต๊ณ ๋ชจ๋ธ/์ค๋ช
๊ฐ๋ฅ์ฑ |
| **์ง๋ ฌํ** | `orjson`, `ormsgpack`, `jsonlines`, `ujson` | ๊ณ ์ JSON/MsgPack |
| **๋ฉ์์ง** | `aiokafka`, `kafka-python`, `paho-mqtt` | Kafka/MQTT ์คํธ๋ฆฌ๋ฐ |
| **ํด๋ผ์ฐ๋** | `boto3`, `botocore`, `s3transfer` | AWS S3 ์คํ ๋ฆฌ์ง |
์ ํ ์ค์น(ํ์ ์): `paddleocr`, `paddlepaddle`, `paddlex`, `opencv-contrib-python`, `ultralytics` โ `requirements-data.txt` ํ๋จ ์ฃผ์ ์ฐธ๊ณ .
#### web โ ์น/API (`requirements-web.txt`, ~25๊ฐ)
| ์นดํ
๊ณ ๋ฆฌ | ํจํค์ง | ์ค๋ช
|
|----------|--------|------|
| **ํ๋ ์์ํฌ** | `fastapi`, `starlette`, `uvicorn`, `uvloop`, `Flask`, `Werkzeug`, `gradio`, `gradio_client` | REST API/UI ์๋ฒ |
| **HTTP ํด๋ผ์ด์ธํธ** | `httpx`, `httpx-sse`, `httpcore`, `requests`, `requests-oauthlib`, `aiohttp` | ๋๊ธฐ/๋น๋๊ธฐ HTTP |
| **์๋ฒ ์ ํธ** | `h11`, `httptools`, `websockets`, `websocket-client`, `watchfiles`, `python-multipart` | ๊ณ ์ฑ๋ฅ ์๋ฒ/WebSocket |
| **ํ
ํ๋ฆฟ** | `Jinja2`, `MarkupSafe`, `itsdangerous` | HTML ๋ ๋๋ง |
| **์ธ์ฆ/๋ณด์** | `PyJWT`, `bcrypt`, `cryptography`, `pyOpenSSL` | JWT/์ํธํ/TLS |
| **๋ชจ๋ํฐ๋ง** | `prometheus_client`, `sentry-sdk` | ๋ฉํธ๋ฆญ/์๋ฌ ์ถ์ |
#### cpu โ CPU ์ ์ฉ (`requirements-cpu.txt`, 4๊ฐ)
| ํจํค์ง | ์ค๋ช
|
|--------|------|
| `torch`, `torchaudio`, `torchvision` | CPU ๋น๋ (PyTorch CPU index URL) |
| `onnxruntime` | CPU ์ถ๋ก ์์ง |
#### mps โ Apple Silicon (`requirements-mps.txt`, 4๊ฐ)
| ํจํค์ง | ์ค๋ช
|
|--------|------|
| `torch`, `torchaudio`, `torchvision` | ๊ธฐ๋ณธ PyPI ๋น๋ (MPS ํฌํจ) |
| `onnxruntime` | CPU ์ถ๋ก ์์ง (macOS์ฉ GPU ๋ฒ์ ์์) |
**์ค์น ์กฐํฉ ์์:** GPU ์ํฌ์คํ
์ด์
= `core` + `gpu` + `data` + `web` โ **240+๊ฐ ํจํค์ง**
### [5/7] Node.js (์ ํ)
NVM (Node Version Manager)์ ์ค์นํ๊ณ , Node.js LTS๋ฅผ ์ค์นํฉ๋๋ค.
- ํ๋กํ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ์ ํ/๋ฏธ์ ํ ๊ฒฐ์
- Interactive ๋ชจ๋์์ ์ค์น ์ฌ๋ถ๋ฅผ ๋ฌผ์ด๋ด
- Lazy loading: ์
ธ ์์ ์ NVM์ ๋ก๋ํ์ง ์๊ณ , `node`/`npm` ์ต์ด ์คํ ์ ๋ก๋
### [6/7] Java (์ ํ)
SDKMAN์ ์ค์นํ๊ณ , Java 21 (LTS)์ ์ค์นํฉ๋๋ค.
- ํ๋กํ์ ๋ฐ๋ผ ๊ธฐ๋ณธ ์ ํ/๋ฏธ์ ํ ๊ฒฐ์
- Lazy loading: `sdk`/`java` ์ต์ด ์คํ ์ ๋ก๋
### [7/7] Shell Integration
`.bashrc`์ `.zshrc`์ ๋ชจ๋ ์์ฑ ๋ธ๋ก์ ์ถ๊ฐํฉ๋๋ค.
```bash
# >>> machine_setting >>>
# Auto-source shell modules from machine_setting
for f in ~/machine_setting/shell/bashrc.d/[0-9]*.sh; do
[ -r "$f" ] && source "$f"
done
# Source machine-local secrets (never committed)
[ -r "$HOME/.bashrc.local" ] && source "$HOME/.bashrc.local"
# <<< machine_setting <<<
```
์ด ๋ธ๋ก์ ๋ค์ ์
ธ ๋ชจ๋์ ์์๋๋ก ๋ก๋ํฉ๋๋ค:
| ํ์ผ | ์ญํ |
|------|------|
| `00-path.sh` | PATH ์ค์ (CUDA, Homebrew, uv, Maven) |
| `10-aliases.sh` | ๊ณตํต ๋ณ์นญ (์๋ ํ ์ฐธ์กฐ) |
| `20-env.sh` | ํ๊ฒฝ๋ณ์ ์ค์ |
| `30-nvm.sh` | NVM lazy loader (`node`/`npm` ์ต์ด ์คํ ์ ๋ก๋) |
| `40-sdkman.sh` | SDKMAN lazy loader |
| `50-ai-env.sh` | `aienv` / `aienv-off` ํจ์ + ๋ฐฑ๊ทธ๋ผ์ด๋ ์
๋ฐ์ดํธ ์ฒดํฌ |
#### ์ ๋ณ์นญ ๋ชฉ๋ก (`10-aliases.sh`)
| ๋ณ์นญ | ๋ช
๋ น | ์ฉ๋ |
|------|------|------|
| `py` | `python3` | Python ์คํ |
| `pip` | `pip3` | pip ์คํ |
| `ipy` | `ipython` | IPython |
| `gs` | `git status` | Git ์ํ |
| `gd` | `git diff` | Git ๋ณ๊ฒฝ์ฌํญ |
| `gl` | `git log --oneline -20` | ์ต๊ทผ ์ปค๋ฐ 20๊ฐ |
| `gp` | `git pull --rebase` | Git pull |
| `ms` | `cd ~/machine_setting` | ์ ์ฅ์ ์ด๋ |
| `mss` | `make status` | ๋๊ธฐํ ์ํ |
| `msu` | `make update` | ์
๋ฐ์ดํธ |
| `msp` | `make push` | ํธ์ |
| `gpustat` | `nvidia-smi --query-gpu=...` | GPU ์ํ (Linux: nvidia-smi, macOS: ioreg) |
---
## Installed Components
์ค์น ํ ์์คํ
์ ์ถ๊ฐ๋๋ ํญ๋ชฉ ์ ๋ฆฌ:
### Files & Directories
| ๊ฒฝ๋ก | ์ค๋ช
| ์ญ์ ๋์ |
|------|------|-----------|
| `~/machine_setting/` | ์ด ์ ์ฅ์ ์์ฒด | `rm -rf ~/machine_setting` |
| `~/ai-env/` | Python venv (global ๋ชจ๋) | `make uninstall` |
| `~/.local/bin/uv` | uv ํจํค์ง ๋งค๋์ | ์๋ ์ญ์ |
| `~/.local/share/uv/python/` | uv๊ฐ ๊ด๋ฆฌํ๋ Python ๋น๋ | `make uninstall` |
| `~/.nvm/` | NVM + Node.js | `make uninstall` |
| `~/.sdkman/` | SDKMAN + Java | `make uninstall` |
| `~/.machine_setting/` | ์ค์น ์ํ/์ฒดํฌํฌ์ธํธ/๋ฐฑ์
| `make uninstall` |
| `~/.machine_setting_profile` | ํ๋์จ์ด ๊ฐ์ง ๊ฒฐ๊ณผ | `make uninstall` |
| `~/.bashrc.local` | ์ฌ์ฉ์ ์ํฌ๋ฆฟ (์๋ ์์ฑ ํ
ํ๋ฆฟ) | **์ ๋ ์ญ์ ์ํจ** |
| `~/.zshrc.local` | zsh์ฉ ์ํฌ๋ฆฟ (bashrc.local ์ฌ๋ณผ๋ฆญ ๋งํฌ) | **์ ๋ ์ญ์ ์ํจ** |
### NVIDIA ์์คํ
ํ์ผ (Stage 2์์ ์ค์น)
| ๊ฒฝ๋ก | ์ค๋ช
| ์ญ์ ๋์ |
|------|------|-----------|
| NVIDIA driver | `nvidia-driver-XXX` ํจํค์ง | `uninstall --component nvidia` |
| `/usr/local/cuda` | CUDA Toolkit ์ฌ๋ณผ๋ฆญ ๋งํฌ | `uninstall --component nvidia` |
| `cuda-toolkit` | CUDA ๊ฐ๋ฐ ๋๊ตฌ | `uninstall --component nvidia` |
| `cudnn9-cuda-*` | cuDNN 9.x ๋ผ์ด๋ธ๋ฌ๋ฆฌ | `uninstall --component nvidia` |
| `libnccl2`, `libnccl-dev` | NCCL ๋ฉํฐ GPU ํต์ | `uninstall --component nvidia` |
| `nvidia-container-toolkit` | Docker GPU ์ง์ | `uninstall --component nvidia` |
| `/etc/sysctl.d/99-machine-setting-gpu.conf` | GPU ์ปค๋ ํ๋ผ๋ฏธํฐ | `uninstall --component nvidia` |
| `/etc/security/limits.d/99-machine-setting-gpu.conf` | memlock/nproc limits | `uninstall --component nvidia` |
| numactl, hwloc, nvtop, lm-sensors | ์์คํ
์ ํธ๋ฆฌํฐ | ์๋ ์ญ์ |
### Shell RC Modifications
`.bashrc`์ `.zshrc`์ ๋ง์ปค ๋ธ๋ก(`# >>> machine_setting >>>` ~ `# <<< machine_setting <<<`)์ด ์ถ๊ฐ๋ฉ๋๋ค. ์ญ์ ์ ์ด ๋ธ๋ก๋ง ์ ๊ฑฐ๋๋ฉฐ, ์ฌ์ฉ์์ ๋ค๋ฅธ ์ค์ ์ ๋ณด์กด๋ฉ๋๋ค.
### Environment Variables (ํ์ฑํ ์)
| ๋ณ์ | ๊ฐ | ์กฐ๊ฑด |
|------|------|------|
| `PATH` | `~/.local/bin`, CUDA ๊ฒฝ๋ก ๋ฑ ์ถ๊ฐ | ํญ์ |
| `CUDA_HOME` | `/usr/local/cuda` | Linux + CUDA |
| `LD_LIBRARY_PATH` | CUDA lib64 ์ถ๊ฐ | Linux + CUDA |
| `NVM_DIR` | `~/.nvm` | Node ์ค์น ์ |
| `NVIDIA_TF32_OVERRIDE` | `1` | `aienv` ํ์ฑํ ์ (Ampere+ GPU) |
---
## Daily Usage
```bash
aienv # Activate venv + background update check
aienv-off # Deactivate
make check # Verify environment (GPU, packages)
make push # Export packages + commit + push to remote
make update # Pull changes + notify if packages changed
make status # Show sync status
make export # Export current venv to requirements files
make doctor # Full health check
make recover # Auto-recover broken components
```
### ์ ์ฒด Make ํ๊ฒ
| ํ๊ฒ | ์ค๋ช
|
|------|------|
| `make setup` | ์ ์ฒด ๋ถํธ์คํธ๋ฉ ์ค์น |
| `make plan` | Pre-flight check (์ค์น ๊ณํ๋ง) |
| `make preflight` | Pre-flight check ํ ์ค์น |
| `make dry-run` | ์ ์ฒด ์์คํ
dry-run ์ง๋จ (7๋จ๊ณ) |
| `make check` | AI ํ๊ฒฝ ๊ฒ์ฆ (GPU, ํจํค์ง) |
| `make update` | ๋ฆฌ๋ชจํธ์์ pull + ๋ณ๊ฒฝ์ฌํญ ์๋ฆผ |
| `make push` | ํจํค์ง export + commit + push |
| `make status` | ๋๊ธฐํ ์ํ ํ์ธ |
| `make export` | venv โ requirements ํ์ผ export |
| `make venv` | venv ์์ฑ/์
๋ฐ์ดํธ |
| `make venv-local` | ํ๋ก์ ํธ ๋ก์ปฌ venv ์์ฑ |
| `make detect` | ํ๋์จ์ด ๊ฐ์ง ์คํ |
| `make secrets` | ์ํฌ๋ฆฟ ๋์ถ ์ค์บ |
| `make doctor` | ๊ฑด๊ฐ ์ฒดํฌ |
| `make recover` | ์๋ ๋ณต๊ตฌ |
| `make verify` | ํจํค์ง ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ |
| `make uninstall` | ๋ํํ ์ญ์ |
| `make uninstall-dry` | ์ญ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ |
| `make reset` | ์ํ ์ด๊ธฐํ ํ ์ฒ์๋ถํฐ |
| `make cloud` | Cloud/container ์ค์น (user-space only, sudo ๋ถํ์) |
| `make gpu-extras` | GPU ๋ณด์กฐ๋ง ์ค์น (์์คํ
์ ํธ + ์ปค๋ ํ๋, sudo). ๋๋ผ์ด๋ฒ/CUDA๋ ์ด๋ฏธ ์์ ๋ ์ฌ์ฉ |
| `make gpu-doctor` | GPU ์ ์ฉ ๊ฑด๊ฐ ์ง๋จ |
| `make gpu-persist-fix` | GPU ์์ ์ฑ ์๊ตฌ ์์ (sudo ํ์) |
| `make gpu-persist-check` | GPU ์์ ์ฑ ์์ ์ํ ํ์ธ (sudo ๋ถํ์) |
### `aienv` ๋์ ์์ธ
1. `~/ai-env/bin/activate` ์คํ (venv ํ์ฑํ)
2. `NVIDIA_TF32_OVERRIDE=1` ์ค์ (Ampere+ GPU์์ FP32 ์ฐ์ฐ ~2x ๊ฐ์)
3. Cloud/container์์ nvcc ์์ผ๋ฉด `DS_BUILD_OPS=0` ์๋ ์ค์ (DeepSpeed JIT ์ปดํ์ผ ๋นํ์ฑ)
4. **๋ฐฑ๊ทธ๋ผ์ด๋ ์
๋ฐ์ดํธ ์ฒดํฌ** ์์:
- 24์๊ฐ๋ง๋ค `git fetch origin main` ์คํ
- ๋ก์ปฌ๊ณผ ๋ฆฌ๋ชจํธ๊ฐ ๋ค๋ฅด๋ฉด ์
๋ฐ์ดํธ ์๋ฆผ ์ถ๋ ฅ
- ์์ ํ ๋ฐฑ๊ทธ๋ผ์ด๋๋ก ์คํ๋์ด ์
ธ ์๋์ ์ํฅ ์์
### `make check` ์ถ๋ ฅ ์์
```
=== AI Environment Check ===
Venv: /root/ai-env
Python: Python 3.12.13
Installed packages: 379
--- Core Packages ---
OK transformers 4.57.6
OK datasets 4.6.1
OK accelerate 1.12.0
...
--- GPU Stack ---
torch 2.10.0+cu128 (CUDA 12.8, 1 GPU(s), NVIDIA H100 PCIe)
cuDNN 91002 (enabled=True)
NCCL 2.27.5
--- GPU Packages ---
bitsandbytes 0.49.2
triton 3.6.0
vllm 0.17.1
deepspeed 0.18.8
--- GPU Functional Test ---
matmul (512x512): OK
cuDNN conv2d: OK
GPU memory: 39.4 GB
Compute cap: (9, 0)
--- Environment ---
Container: yes
nvcc: stub (runtime only, no JIT compile)
Display: headless (no libGL)
```
---
## CLI Options
### Interactive (๊ธฐ๋ณธ)
```bash
./setup.sh
```
๋ชจ๋ ๋จ๊ณ์์ ์ต์
์ ๋ฌผ์ด๋ด
๋๋ค (Python ๋ฒ์ , venv ์์น, Node/Java ์ค์น ์ฌ๋ถ). Pre-flight check๊ฐ ๋จผ์ ์คํ๋์ด ํ์ฌ ์ํ์ ํ์ํ ์์
์ ๋ณด์ฌ์ค๋๋ค.
### Non-interactive
```bash
# ์ ์ฒด ์ง์
./setup.sh --python 3.12 --venv global --node --java
# ํ๋กํ ์ฌ์ฉ
./setup.sh --profile gpu-workstation
./setup.sh --profile mac-apple-silicon
# ์ ํ์ ์ค์น
./setup.sh --no-node --no-java --venv local
# Custom venv ๊ฒฝ๋ก
./setup.sh --venv /data/ai-env
```
### Dry-Run ์ง๋จ
```bash
# ์ ์ฒด ์์คํ
dry-run (7๊ฐ ์ ๋จ๊ณ ์ง๋จ)
./setup.sh --dry-run
make dry-run
# ํน์ ๋จ๊ณ๋ง ์ง๋จ
./scripts/dry-run.sh --stage nvidia
./scripts/dry-run.sh --stage python
# ํ๋กํ ๊ธฐ๋ฐ ์ง๋จ
./scripts/dry-run.sh --profile gpu-workstation
# JSON ์ถ๋ ฅ (์คํฌ๋ฆฝํ
์ฉ)
./scripts/dry-run.sh --json
```
Dry-run์ ์ค์ ์ค์น ์์ด 7๊ฐ ์ ๋จ๊ณ๋ฅผ ๋ถ์ํฉ๋๋ค:
- ํ์ฌ ์ค์น ์ํ ๋ฐ ๋ฒ์ ๊ฐ์ง
- ์ค์น/์
๊ทธ๋ ์ด๋/์คํต ์ก์
ํ๋
- ์ถฉ๋ ๋ฐ ํธํ์ฑ ๊ฒ์ฌ (CUDAโPyTorch, Pythonโvenv ๋ฑ)
- ๋์คํฌ ์ฌ์ฉ๋ ๋ฐ ์์ ์ค์น ์๊ฐ
- ์ฐจ๋จ ์ด์ ๋ฐ๊ฒฌ ์ exit code 1 ๋ฐํ
### Pre-flight & Planning
```bash
# ์ค์น ๊ณํ๋ง ํ์ธ (์ค์ ์ค์น ์ํจ)
./setup.sh --plan
make plan
# Pre-flight check ํ ์ ํ์ ์ค์น
./setup.sh --preflight
make preflight
# ์ง์ ์คํ (์ถ๊ฐ ์ต์
)
./scripts/preflight.sh --check-only # ์ํ ํ์ธ๋ง (= --plan)
./scripts/preflight.sh --quiet # ๋น๋ํํ (๊ณํ ํ์ผ ์์ฑ ํ ์ข
๋ฃ)
./scripts/preflight.sh --profile gpu-workstation # ํน์ ํ๋กํ ๊ธฐ์ค ๊ฒ์ฌ
```
### Resume & Recovery
```bash
# ์ด์ ์คํจ ์ง์ ๋ถํฐ ์ฌ๊ฐ
./setup.sh --resume
# ์ํ ์ด๊ธฐํ ํ ์ฒ์๋ถํฐ
./setup.sh --reset
# ํน์ ๋จ๊ณ๋ถํฐ ์์ (์ด์ ๋จ๊ณ๋ ์๋ฃ ์ฒ๋ฆฌ)
./setup.sh --from 4 # Stage 4 (venv)๋ถํฐ
./setup.sh --from 7 # Stage 7 (shell)๋ง
# ๊ฑด๊ฐ ์ฒดํฌ
./setup.sh --doctor
# ์๋ ๋ณต๊ตฌ
./setup.sh --recover
```
### ์ ์ฒด ์ต์
์์ฝ
| Flag | ์ค๋ช
|
|------|------|
| `--python ` | Python ๋ฒ์ (๊ธฐ๋ณธ: 3.12) |
| `--venv ` | `global` / `local` / `` |
| `--node` / `--no-node` | Node.js ์ค์น/๋ฏธ์ค์น |
| `--java` / `--no-java` | Java ์ค์น/๋ฏธ์ค์น |
| `--profile ` | ํ๋กํ ์ฌ์ฉ |
| `--cloud` | Cloud/container ๋ชจ๋ (๋๋ผ์ด๋ฒ/CUDA/์ปค๋ ํ๋ ์คํต) |
| `--dry-run` | ์ ์ฒด ์์คํ
dry-run ์ง๋จ (7๋จ๊ณ) |
| `--plan` | Pre-flight check๋ง ์คํ |
| `--preflight` | Pre-flight check ํ ์ค์น |
| `--resume` | ์คํจ ์ง์ ๋ถํฐ ์ฌ๊ฐ |
| `--reset` | ์ํ ์ด๊ธฐํ ํ ์ฒ์๋ถํฐ |
| `--from ` | Stage N (1-7)๋ถํฐ ์์ |
| `--doctor` | ๊ฑด๊ฐ ์ฒดํฌ |
| `--recover` | ์๋ ๋ณต๊ตฌ |
| `--uninstall` | ์ญ์ (์ถ๊ฐ ํ๋๊ทธ ๊ฐ๋ฅ) |
| `--gpu-doctor` | GPU ์ ์ฉ ๊ฑด๊ฐ ์ง๋จ |
| `--gpu-persist-fix` | GPU ์์ ์ฑ ์๊ตฌ ์์ (sudo ํ์) |
---
## Profiles
| Profile | Platform | GPU Backend | NVIDIA Stage | Node | Java | Packages |
|---------|----------|-------------|-------------|------|------|----------|
| gpu-enterprise | Linux | CUDA (Enterprise) | Full + DCGM/FM/GDS | No | No | core+data+web+gpu |
| ngc-container | NGC/Linux | CUDA (NV symlink) | Skip (pre-installed) | No | No | core+data+web+nv-link |
| gpu-workstation | Linux | CUDA | Full (consumer) | Yes | Yes | core+data+web+gpu |
| cloud-server | Cloud/Container | CUDA (ํธ์คํธ ์ ๊ณต) | Skip (user-space only) | Yes | Yes | core+data+web+gpu |
| mac-apple-silicon | macOS | MPS | Skip (N/A) | Yes | No | core+data+web+mps |
| cpu-server | Linux | None | Skip (no GPU) | Yes | Yes | core+data+web+cpu |
| laptop | Any | None | Skip (no GPU) | Yes | No | core+data+web+cpu |
| minimal | Any | None | Skip | No | No | core only |
### Machine-specific ์ค์
`config/machine.conf`๋ฅผ ๋ง๋ค์ด ๊ธฐ๋ณธ ์ค์ ์ ์ค๋ฒ๋ผ์ด๋ํ ์ ์์ต๋๋ค (`.gitignore`์ ํฌํจ):
```bash
cp config/machine.conf.example config/machine.conf
# ํธ์ง: Python ๋ฒ์ , Node/Java ์ค์น ์ฌ๋ถ, ํจํค์ง ๊ทธ๋ฃน ๋ฑ
```
---
## GPU Support
| Platform | GPU | Backend | ์๋ ๊ฐ์ง ๋ฐฉ๋ฒ |
|----------|-----|---------|---------------|
| NGC container | NVIDIA | CUDA (NV custom build symlink) | torch ๋ฒ์ ์ฒดํฌ |
| Cloud/Container | NVIDIA | CUDA (ํธ์คํธ ๋๋ผ์ด๋ฒ ์ฌ์ฉ) | Docker/K8s/VM ๋ฒค๋ ๊ฐ์ง + nvidia-smi |
| Linux | NVIDIA | CUDA (cu131, cu130, cu126 ๋ฑ) | lspci + nvcc |
| macOS arm64 | Apple Silicon | MPS (Metal) | uname -m |
| Any | None | CPU fallback | ์๋ |
### NVIDIA System-Level Install (Stage 2)
[2/7] ๋จ๊ณ์์ ๋ค์ ์์คํ
๋ ๋ฒจ NVIDIA ์ํํธ์จ์ด๋ฅผ ์๋ ์ค์นํฉ๋๋ค:
```bash
# ์๋ ๋ชจ๋ (๊ธฐ๋ณธ) โ GPU ๊ฐ์ง ํ ์ต์ ๊ตฌ์ฑ ์๋ ์ค์น
./setup.sh
# ์๋: NVIDIA ์คํฌ๋ฆฝํธ ์ง์ ์คํ
./scripts/install-nvidia.sh # ์ ์ฒด ์๋
./scripts/install-nvidia.sh --driver-only # ๋๋ผ์ด๋ฒ๋ง
./scripts/install-nvidia.sh --no-driver # ๋๋ผ์ด๋ฒ ์ ์ธ (CUDA/cuDNN/NCCL๋ง)
./scripts/install-nvidia.sh --extras-only # ๋ณด์กฐ๋ง (์์คํ
์ ํธ + ์ปค๋ ํ๋, ๋๋ผ์ด๋ฒ/CUDA ์คํต). make gpu-extras์ ๋์ผ
./scripts/install-nvidia.sh --enterprise # ์ํฐํ๋ผ์ด์ฆ ๋๊ตฌ ํฌํจ
./scripts/install-nvidia.sh --dry-run # ์ค์น ๋ฏธ๋ฆฌ๋ณด๊ธฐ (์ฌ์ธต ์ง๋จ)
./scripts/install-nvidia.sh --uninstall # NVIDIA ์คํ ์ ์ฒด ์ ๊ฑฐ
# ์ธ๋ถ ์ ํ ์ค์น
./scripts/install-nvidia.sh --no-cuda # CUDA ์ ์ธ (cuDNN/NCCL๋ ์ ์ธ)
./scripts/install-nvidia.sh --no-cudnn # cuDNN๋ง ์ ์ธ
./scripts/install-nvidia.sh --no-nccl # NCCL๋ง ์ ์ธ
./scripts/install-nvidia.sh --no-container-toolkit # Docker GPU ์ง์ ์ ์ธ
./scripts/install-nvidia.sh --no-system-tools # ์์คํ
์ ํธ๋ฆฌํฐ ์ ์ธ
./scripts/install-nvidia.sh --no-kernel-tuning # ์ปค๋/sysctl ์ต์ ํ ์ ์ธ
# ๋ฒ์ ์ง์
./scripts/install-nvidia.sh --driver-version 570 # ๋๋ผ์ด๋ฒ ๋ฒ์ ์ง์
./scripts/install-nvidia.sh --cuda-version 13-0 # CUDA ๋ฒ์ ์ง์
./scripts/install-nvidia.sh --open-kernel # open ์ปค๋ ๋ชจ๋ ๊ฐ์
./scripts/install-nvidia.sh --proprietary # proprietary ์ปค๋ ๋ชจ๋ ๊ฐ์
```
**NVIDIA ์ค์ ์ต์
** (`config/default.conf` ๋๋ `config/machine.conf`):
| ์ค์ | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช
|
|------|--------|------|
| `INSTALL_NVIDIA` | `true` | NVIDIA ์คํ
์ด์ง ์ ์ฒด ํ์ฑํ/๋นํ์ฑํ |
| `NVIDIA_DRIVER_VERSION` | `""` (์๋) | ๋๋ผ์ด๋ฒ ๋ฒ์ (๋น์ด์์ผ๋ฉด ์ถ์ฒ ๋ฒ์ ์๋ ์ ํ) |
| `NVIDIA_CUDA_VERSION` | `"13-0"` (CUDA 13.0) | CUDA ๋ฒ์ . ๊ตฌํ GPU๋ machine.conf์์ `"12-6"` ๋ฑ ์ง์ |
| `NVIDIA_OPEN_KERNEL` | `auto` | open/proprietary ์ปค๋ ๋ชจ๋ ์ ํ |
| `NVIDIA_ENTERPRISE` | `false` | ์ํฐํ๋ผ์ด์ฆ ๋๊ตฌ (DCGM, FM, GDS, peermem) |
| `NVIDIA_NO_DRIVER` | `false` | ๋๋ผ์ด๋ฒ ์ค์น ์คํต |
| `NVIDIA_CONTAINER_TOOLKIT` | `true` | Docker GPU ์ง์ |
| `NVIDIA_SYSTEM_TOOLS` | `true` | ๋น๋ ๋๊ตฌ, ๋ชจ๋ํฐ๋ง ๋๊ตฌ |
| `NVIDIA_KERNEL_TUNING` | `true` | ์ปค๋/sysctl ์ต์ ํ |
### CUDA ๋ฒ์ ๋งค์นญ (Python ํจํค์ง)
๊ฐ์ง๋ CUDA ๋ฒ์ ์ ๋ฐ๋ผ PyTorch index URL์ด ์๋ ์ ํ๋ฉ๋๋ค (`config/gpu-index-urls.conf`):
```
cu131=https://download.pytorch.org/whl/cu131
cu130=https://download.pytorch.org/whl/cu130
cu126=https://download.pytorch.org/whl/cu126
cu124=https://download.pytorch.org/whl/cu124
cu121=https://download.pytorch.org/whl/cu121
cpu=https://download.pytorch.org/whl/cpu
```
๊ฐ์ง๋ CUDA suffix๊ฐ ๋ชฉ๋ก์ ์์ผ๋ฉด, ๊ฐ์ฅ ๊ฐ๊น์ด ๋ฎ์ ๋ฒ์ ์ผ๋ก ์๋ fallback๋ฉ๋๋ค.
### NGC Container Mode
NGC ์ปจํ
์ด๋์ฒ๋ผ ์์คํ
์ NV ์ปค์คํ
๋น๋(torch, flash_attn, transformer_engine)๊ฐ ์ด๋ฏธ ์ค์น๋ ํ๊ฒฝ์์๋ PyPI์์ ๋ค์ ๋ฐ์ง ์๊ณ ์ฌ๋ณผ๋ฆญ ๋งํฌ๋ก venv์ ์ฐ๊ฒฐํฉ๋๋ค:
```bash
# ์๋ ๊ฐ์ง (NGC ์ปจํ
์ด๋๋ฉด ์๋ ์ ํ)
./setup.sh
# ์๋ ์ง์
./setup.sh --profile ngc-container
scripts/setup-venv.sh --nv-link
```
**์ฌ๋ณผ๋ฆญ ๋งํฌ ๋์ ํจํค์ง:** torch, torchvision, torchaudio, triton, flash_attn, transformer_engine
๋์ ๋ฐฉ์:
1. ์์คํ
site-packages ๊ฒฝ๋ก ๊ฐ์ง (์: `/usr/local/lib/python3.12/dist-packages`)
2. ๋์ ํจํค์ง ๋๋ ํ ๋ฆฌ๋ฅผ venv์ site-packages์ ์ฌ๋ณผ๋ฆญ ๋งํฌ
3. `.dist-info` ๋๋ ํ ๋ฆฌ๋ ํจ๊ป ๋งํฌ (pip์ด ํจํค์ง๋ฅผ ์ธ์ํ๋๋ก)
> **Python ๋ฒ์ ๋ถ์ผ์น ๊ฐ์ง:** ์์คํ
Python(์: 3.10)๊ณผ venv Python(์: 3.12)์ ๋ฒ์ ์ด ๋ค๋ฅด๋ฉด NV link๊ฐ ์๋์ผ๋ก ์คํต๋๊ณ , GPU ํจํค์ง๋ฅผ pip์ผ๋ก ์ง์ ์ค์นํ๋ fallback์ด ๋์ํฉ๋๋ค.
### Cloud/Container Mode
Docker, Kubernetes, ํด๋ผ์ฐ๋ VM ๋ฑ ํธ์คํธ๊ฐ GPU ๋๋ผ์ด๋ฒ๋ฅผ ์ ๊ณตํ๋ ํ๊ฒฝ์์ user-space ๋๊ตฌ๋ง ์ค์นํฉ๋๋ค.
```bash
# ์๋ ๊ฐ์ง (์ปจํ
์ด๋/ํด๋ผ์ฐ๋ ํ๊ฒฝ์ด๋ฉด ์๋ ํ์ฑํ)
./setup.sh
# ๋ช
์ ์ง์
./setup.sh --cloud
make cloud
```
**์๋ ๊ฐ์ง ์กฐ๊ฑด:**
- `/.dockerenv` ๋๋ `/run/.containerenv` ์กด์ฌ
- cgroup์ `docker`/`containerd`/`kubepods` ๋ง์ปค
- `KUBERNETES_SERVICE_HOST` ํ๊ฒฝ๋ณ์
- DMI ๋ฒค๋๊ฐ AWS/GCP/Azure/DigitalOcean/Vultr/Oracle
- sudo ๋ช
๋ น์ด ์๊ฑฐ๋ ๊ถํ ์์
**Cloud ๋ชจ๋์์ ์คํต:**
- NVIDIA ๋๋ผ์ด๋ฒ/CUDA Toolkit ์ค์น
- ์ปค๋ ํ๋ (sysctl, limits)
- ์์คํ
ํจํค์ง (apt-get)
**Cloud ๋ชจ๋์์ ์ค์น:**
- Hardware Detection (์ฝ๊ธฐ ์ ์ฉ, ํธ์คํธ GPU ์ธ์)
- Python (uv, user-space)
- AI venv (GPU ํจํค์ง ํฌํจ โ ํธ์คํธ CUDA ๋ฐํ์ ์ฌ์ฉ)
- Node.js (nvm), Java (sdkman)
- Shell integration
**Cloud ํ๊ฒฝ ์ถ๊ฐ ๋์:**
- **headless ์ปจํ
์ด๋**: `libGL` ์์ผ๋ฉด `opencv-python` ๋์ `opencv-python-headless`๋ง ์ค์น
- **nvcc ์๋ ๋ฐํ์ ์ปจํ
์ด๋**: nvcc stub ์๋ ์์ฑ (DeepSpeed import ํธํ)
- **`aienv` ํ์ฑํ ์**: nvcc ์์ผ๋ฉด `DS_BUILD_OPS=0` ์๋ ์ค์
### GPU Persistence & Stability
PCIe ์ ์ ๊ด๋ฆฌ๋ก ์ธํ Xid 79 "GPU has fallen off the bus" ๋ฌธ์ ๋ฅผ ์๊ตฌ์ ์ผ๋ก ํด๊ฒฐํฉ๋๋ค.
```bash
# ์ํ ํ์ธ (sudo ๋ถํ์)
./scripts/gpu-persist-fix.sh --check
make gpu-persist-check
# ์๊ตฌ ์์ ์ ์ฉ (6๊ฐ ํญ๋ชฉ)
sudo ./scripts/gpu-persist-fix.sh
make gpu-persist-fix
# ๋ณ๊ฒฝ ๋ฏธ๋ฆฌ๋ณด๊ธฐ
sudo ./scripts/gpu-persist-fix.sh --dry-run
# ๋ณ๊ฒฝ ๋๋๋ฆฌ๊ธฐ
sudo ./scripts/gpu-persist-fix.sh --revert
```
**์ ์ฉ๋๋ 6๊ฐ์ง ์์ :**
| # | ํญ๋ชฉ | ์ค๋ช
|
|---|------|------|
| 1 | GRUB | PCIe ASPM ๋นํ์ฑํ + GPU ๋์ ์ ์ ๊ด๋ฆฌ ๋ |
| 2 | udev | NVIDIA GPU PCIe power/control์ 'on'์ผ๋ก ๊ฐ์ |
| 3 | modprobe | NVreg_DynamicPowerManagement=0x00 ์ค์ |
| 4 | nvidia-persistenced | GPU persistence daemon ํ์ฑํ |
| 5 | GPU watchdog | 5๋ถ๋ง๋ค GPU ์ํ ์ ๊ฒ systemd timer |
| 6 | PCIe power service | ๋ถํ
์ power/control=on ๊ฐ์ ์ ์ฉ |
> **์ฐธ๊ณ :** PCIe power ์ค์ ์ ์ฆ์ ์ ์ฉ๋๋ฉฐ, ๋๋จธ์ง๋ ๋ฆฌ๋ถํธ ํ ์์ ์ ์ฉ๋ฉ๋๋ค.
---
## Pre-flight Check
`./setup.sh --plan` ๋๋ `make plan`์ผ๋ก ์ค์ ์ค์น ์์ด ํ์ฌ ์์คํ
์ํ๋ฅผ ํ์ธํฉ๋๋ค.
```
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ Pre-flight System Check โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
System: Ubuntu 22.04.5 LTS / AMD EPYC 7763 (128 cores) / 512GB RAM / 2847GB free
GPU: NVIDIA A100-SXM4-80GB / CUDA 12.6 (cu126)
Profile: gpu-workstation
# Component Current Status Proposed Action
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
* 1 Hardware Profile not generated โ INSTALL
Generate ~/.machine_setting_profile
* 2 NVIDIA GPU Stack driver 535 / no CUDA โ INSTALL
Install CUDA toolkit, cuDNN, NCCL, system tools
3 Python 3.12 3.12.8 installed + uv 0.5.14 (ok)
* 4 AI Environment not created โ INSTALL
Create ~/ai-env + install [core data web + GPU]
5 Node.js v22.12.0 (NVM) (ok)
* 6 Java 21 not installed โ INSTALL
Install SDKMAN + Java 21
7 Shell Integration configured (.bashrc .zshrc) (ok)
```
Interactive ๋ชจ๋์์๋ ํญ๋ชฉ๋ณ๋ก ํ ๊ธํ์ฌ ์ํ๋ ๊ฒ๋ง ์ค์นํ ์ ์์ต๋๋ค.
---
## Reinstallation
### ์ ์ฒด ์ฌ์ค์น
```bash
# ๋ฐฉ๋ฒ 1: ์ํ ๋ฆฌ์
ํ ์ฌ์ค์น
./setup.sh --reset
# ๋ฐฉ๋ฒ 2: make ์ฌ์ฉ
make reset
```
์ด ๋ช
๋ น์ `~/.machine_setting/install.state` ํ์ผ์ ์ด๊ธฐํํ๊ณ , ๋ชจ๋ ๋จ๊ณ๋ฅผ ์ฒ์๋ถํฐ ๋ค์ ์คํํฉ๋๋ค. ์ด๋ฏธ ์ค์น๋ ์ปดํฌ๋ํธ(venv, Python ๋ฑ)๋ ๊ฐ ๋จ๊ณ์์ "์ด๋ฏธ ์กด์ฌ" ์ฌ๋ถ๋ฅผ ํ์ธํ์ฌ ์ฌ์์ฑ ์ฌ๋ถ๋ฅผ ๋ฌผ์ด๋ด
๋๋ค.
### ํน์ ๋จ๊ณ๋ง ์ฌ์ค์น
```bash
# Stage 4 (venv)๋ถํฐ ์ฌ์ค์น โ Stage 1~3์ ๊ฑด๋๋
./setup.sh --from 4
# Stage 7 (shell integration)๋ง ์ฌ์ค์น
./setup.sh --from 7
```
### venv๋ง ์ฌ์์ฑ
```bash
# ๊ธฐ์กด venv ์ญ์ ํ ์ฌ์์ฑ (ํจํค์ง ์ ์ฒด ์ฌ์ค์น)
rm -rf ~/ai-env
make venv
# ๋๋ ์คํฌ๋ฆฝํธ ์ง์ ์คํ (์ ์ฒด ์ต์
)
scripts/setup-venv.sh --global --python 3.12
scripts/setup-venv.sh --local # ํ๋ก์ ํธ ๋ก์ปฌ .venv
scripts/setup-venv.sh --path /custom/path # ์ปค์คํ
๊ฒฝ๋ก
scripts/setup-venv.sh --profile gpu-workstation # ํ๋กํ ์ง์
scripts/setup-venv.sh --nv-link # NGC ์ปจํ
์ด๋์ฉ (์์คํ
ํจํค์ง ์ฌ๋ณผ๋ฆญ ๋งํฌ)
```
### ํจํค์ง๋ง ์
๋ฐ์ดํธ
```bash
# ๋ฆฌ๋ชจํธ์์ ์ต์ requirements ๊ฐ์ ธ์์ venv ์
๋ฐ์ดํธ
make update
# ์๋์ผ๋ก venv์ ํจํค์ง ์ฌ์ค์น
scripts/setup-venv.sh
```
---
## Uninstall
### Interactive ๋ชจ๋ (๊ธฐ๋ณธ)
```bash
make uninstall
# ๋๋
./scripts/uninstall.sh
```
์ค์น๋ ์ปดํฌ๋ํธ ๋ชฉ๋ก์ ๋ณด์ฌ์ฃผ๊ณ , ํ ๊ธ ๋ฐฉ์์ผ๋ก ์ญ์ ํ ํญ๋ชฉ์ ์ ํํฉ๋๋ค:
```
=== Machine Setting Uninstall ===
Components found:
[1] โ NVIDIA stack (driver 560.35.03, CUDA, cuDNN, tools)
[2] โ AI Virtual Environment (~/ai-env, 12G)
[3] โ Python via uv (1.8G)
[4] โ NVM + Node.js (287M)
[5] Java/SDKMAN (not installed)
[6] โ Shell integration (.bashrc .zshrc)
[7] โ Config & state files
Toggle numbers to select/deselect, 'a' for all, Enter to proceed:
```
### ์ ์ฒด ์ญ์
```bash
# ๋ชจ๋ ์ปดํฌ๋ํธ ์ญ์ (ํ์ธ ํ์: 'UNINSTALL' ์
๋ ฅ)
./scripts/uninstall.sh --all
# config/state๋ ์ ์งํ๊ณ ๋ฐํ์๋ง ์ญ์
./scripts/uninstall.sh --all --keep-config
```
### ํน์ ์ปดํฌ๋ํธ๋ง ์ญ์
```bash
# venv์ Node.js๋ง ์ญ์
./scripts/uninstall.sh --component venv,node
# NVIDIA ์คํ๋ง ์ญ์
./scripts/uninstall.sh --component nvidia
# ์ฌ์ฉ ๊ฐ๋ฅํ ์ปดํฌ๋ํธ: nvidia, venv, python, node, java, shell, config
```
### Dry-run (์ญ์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ)
```bash
make uninstall-dry
# ๋๋
./scripts/uninstall.sh --dry-run
```
### ์์ ์ญ์
uninstall ํ์๋ `~/machine_setting` ์ ์ฅ์ ์์ฒด๋ ๋จ์์์ต๋๋ค. ์์ ํ ์ ๊ฑฐํ๋ ค๋ฉด:
```bash
./scripts/uninstall.sh --all
rm -rf ~/machine_setting
```
**์ฃผ์:** `~/.bashrc.local`๊ณผ `~/.zshrc.local`์ ์ฌ์ฉ์ ์ํฌ๋ฆฟ ํ์ผ์ด๋ฏ๋ก ์ ๋ ์๋ ์ญ์ ๋์ง ์์ต๋๋ค.
---
## Health Check & Recovery
### Doctor (๊ฑด๊ฐ ์ฒดํฌ)
```bash
make doctor
# ๋๋
./scripts/doctor.sh
```
๋ค์ ํญ๋ชฉ์ ์ ๊ฒํฉ๋๋ค:
| ์ฒดํฌ ํญ๋ชฉ | ํ์ธ ๋ด์ฉ |
|-----------|-----------|
| Disk space | venv ๊ฒฝ๋ก์ 1GB ์ด์ ์ฌ์ |
| Hardware profile | `~/.machine_setting_profile` ์กด์ฌ ๋ฐ ์ ํจ์ฑ |
| Cloud environment | Cloud/container ํ๊ฒฝ ๊ฐ์ง (Docker, K8s, ํด๋ผ์ฐ๋ VM, sudo ๊ฐ์ฉ์ฑ) |
| NVIDIA driver | ๋๋ผ์ด๋ฒ ๋ก๋ ์ํ, `nvidia-smi` ๋์ ํ์ธ |
| CUDA toolkit | `nvcc` ์กด์ฌ ๋ฐ ๋ฒ์ (stub vs ์ค์ nvcc ๊ตฌ๋ถ) |
| cuDNN | dpkg ์ค์น ์ํ + **torch.backends.cudnn ๋ฐํ์ ๊ฒ์ฆ** |
| NCCL | dpkg ์ค์น ์ํ + **torch.cuda.nccl ๋ฐํ์ ๊ฒ์ฆ** |
| GPU kernel tuning | sysctl ํ๋ผ๋ฏธํฐ ์ ์ฉ ์ฌ๋ถ (cloud์์๋ ์๋ skip) |
| GPU persistence | gpu-persist-fix 6๊ฐ ํญ๋ชฉ ์ ์ฉ ์ํ |
| CPU frequency | CPU ์ฃผํ์ ์ค๋กํ๋ง ๊ฐ์ง |
| Memory | ๋ฉ๋ชจ๋ฆฌ ์ฌ์ ์จ + swap ์ํ |
| Disk SMART health | ๋์คํฌ SMART ๊ฑด๊ฐ ์ํ (smartmontools ํ์) |
| uv | uv ์ค์น ๋ฐ ๋ฒ์ |
| Python | uv๋ก ๊ด๋ฆฌ๋๋ Python ์กด์ฌ |
| Virtual environment | venv ๋๋ ํ ๋ฆฌ, bin/python, bin/activate ์กด์ฌ |
| Key packages | **26๊ฐ** ํต์ฌ ํจํค์ง import ๊ฒ์ฆ (torch, transformers, anthropic, fastapi, pandas ๋ฑ) |
| GPU packages | **7๊ฐ** GPU ์ ์ฉ ํจํค์ง (vllm, deepspeed, bitsandbytes, pytorch_lightning ๋ฑ) |
| GPU functional | **GPU ์ฐ์ฐ ํ
์คํธ** โ matmul, cuDNN conv2d, NCCL ๊ฐ์ฉ์ฑ |
| Node.js | NVM + Node ์ค์น ์ํ (์ค์น ์ ํ ์) |
| Java | SDKMAN + Java ์ค์น ์ํ (์ค์น ์ ํ ์) |
| Shell integration | .bashrc/.zshrc์ ๋ง์ปค ๋ธ๋ก ์กด์ฌ |
| Platform | Xcode CLT (macOS) |
์ถ๋ ฅ ์์ (Cloud/Container ํ๊ฒฝ):
```
=== Machine Setting Doctor ===
[OK] Disk space (1497GB free)
[OK] Hardware profile
[OK] Cloud environment (container detected)
[OK] NVIDIA driver (535.129.03, NVIDIA H100 PCIe)
[WARN] CUDA Toolkit (stub nvcc 12.2 โ runtime only, no JIT compile)
[OK] cuDNN (system: 8.9.6, torch: enabled v91002)
[OK] NCCL (system: 2.19.3, torch: 2.27.5)
[SKIP] GPU kernel tuning (cloud/container โ managed by host)
[OK] GPU persistence (all 6 fixes in place)
[OK] CPU frequency (2899MHz / 3500MHz, 82%)
[OK] Memory (57GB free, 91%)
[SKIP] Disk SMART health (smartmontools not installed โ apt install smartmontools)
[OK] uv (uv 0.10.10)
[OK] Python (Python 3.12.13)
[OK] Virtual environment (~/ai-env, 379 packages)
[OK] Key packages (OK 26/26)
[OK] GPU packages (OK 7/7)
[OK] GPU functional (OK (NVIDIA H100 PCIe, cuDNN 91002, NCCL ok))
[SKIP] Node.js (not installed)
[SKIP] Java (not installed)
[OK] Shell integration (.bashrc)
[OK] Platform (Linux)
Summary: 12 ok, 0 failed, 0 warnings, 4 skipped
All checks passed!
```
### Auto-recover (์๋ ๋ณต๊ตฌ)
```bash
# ๋ชจ๋ ์คํจ ํญ๋ชฉ ์๋ ๋ณต๊ตฌ
make recover
# ๋๋
./scripts/doctor.sh --recover
# ํน์ ์ปดํฌ๋ํธ๋ง ๋ณต๊ตฌ
./scripts/doctor.sh --recover nvidia
./scripts/doctor.sh --recover python
./scripts/doctor.sh --recover venv
./scripts/doctor.sh --recover shell
```
์ฌ์ฉ ๊ฐ๋ฅํ ๋ณต๊ตฌ ๋์: `disk`, `hardware`, `nvidia`, `gpu_persistence`, `uv`, `python`, `venv`, `packages`, `node`, `java`, `shell`, `platform`
๊ฐ ์ปดํฌ๋ํธ๋ณ ๋ณต๊ตฌ ๋์:
| ์ปดํฌ๋ํธ | ๋ณต๊ตฌ ๋์ |
|----------|-----------|
| hardware | `detect-hardware.sh` ์ฌ์คํ |
| nvidia | `install-nvidia.sh` ์ฌ์คํ (๋๋ผ์ด๋ฒ, CUDA, cuDNN, NCCL) |
| gpu_persistence | `gpu-persist-fix.sh` ์คํ (6๊ฐ ํญ๋ชฉ ์ ์ฉ) |
| uv | uv ์ฌ์ค์น (`curl ... \| sh`) |
| python | uv๊ฐ ์์ผ๋ฉด ๋จผ์ ์ค์น, ๊ทธ ํ `uv python install` |
| venv | venv ์ฌ์์ฑ + ํจํค์ง ์ฌ์ค์น |
| packages | venv ์ ์ฒด ์ฌ์ค์น (= venv ๋ณต๊ตฌ) |
| node | NVM + Node.js ์ฌ์ค์น |
| java | SDKMAN + Java ์ฌ์ค์น |
| shell | `install-shell.sh` ์ฌ์คํ |
| platform | macOS: Xcode CLT ์๋ด |
| disk | ์๋ ์ ๋ฆฌ ์๋ด |
### Package Verification (ํจํค์ง ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ)
```bash
make verify
# ๋๋
./scripts/doctor.sh --verify-packages
```
requirements ํ์ผ์ ๋ช
์๋ ํจํค์ง๊ฐ ๋ชจ๋ ์ค์น๋์ด ์๋์ง ํ์ธํฉ๋๋ค:
```
=== Package Verification ===
Missing packages (required but not installed):
- some-package
Extra packages (installed but not in requirements): 43
(This is normal โ they may be transitive dependencies)
Result: 1 missing package(s)
Run './scripts/doctor.sh --recover venv' to install missing packages.
```
---
## Cross-Machine Sync
์ฌ๋ฌ ๋จธ์ ์์ ๋์ผํ ํจํค์ง ๊ตฌ์ฑ์ ์ ์งํ๊ธฐ ์ํ Git ๊ธฐ๋ฐ ๋๊ธฐํ ์์คํ
์
๋๋ค.
### Push (ํ์ฌ ๋จธ์ โ ๋ฆฌ๋ชจํธ)
```bash
make push
```
๋์:
1. ํ์ฑํ๋ venv์์ ํ์ฌ ํจํค์ง ๋ชฉ๋ก์ requirements ํ์ผ๋ก export
2. ๋ณ๊ฒฝ์ฌํญ `git add -A`
3. ์๋ ์ปค๋ฐ ๋ฉ์์ง ์์ฑ: `update: sync from at `
4. `git pull --rebase` ํ `git push`
### Pull (๋ฆฌ๋ชจํธ โ ํ์ฌ ๋จธ์ )
```bash
make update
```
๋์:
1. `git pull --rebase`
2. requirements ํ์ผ ๋ณ๊ฒฝ ์ฌ๋ถ ๊ฐ์ง
3. ๋ณ๊ฒฝ๋์์ผ๋ฉด `scripts/setup-venv.sh` ์คํ ์๋ด ์ถ๋ ฅ
### Status
```bash
make status
```
๋ก์ปฌ ๋ณ๊ฒฝ์ฌํญ, ๋ฆฌ๋ชจํธ ๋๋น ahead/behind ์ปค๋ฐ ์, ๋ง์ง๋ง ์ปค๋ฐ ์ ๋ณด๋ฅผ ๋ณด์ฌ์ค๋๋ค.
### Export
```bash
make export
```
ํ์ฌ venv์ ํจํค์ง๋ฅผ ์นดํ
๊ณ ๋ฆฌ๋ณ requirements ํ์ผ๋ก ๋ถ๋ฅ/exportํฉ๋๋ค:
- GPU ํจํค์ง โ `requirements-gpu.txt`
- Data ํจํค์ง โ `requirements-data.txt`
- Web ํจํค์ง โ `requirements-web.txt`
- ๋๋จธ์ง โ `requirements-core.txt`
- CPU/MPS ํ์ผ์ ์๋ ๊ด๋ฆฌ
---
## Disk Health & Monitoring
NAS/์๋ฒ ๋์คํฌ ๊ฑด๊ฐ ์ํ๋ฅผ ์ ๊ฒํ๋ ์ ํธ๋ฆฌํฐ ์คํฌ๋ฆฝํธ ๋ชจ์์
๋๋ค. ๋ชจ๋ ์คํฌ๋ฆฝํธ๋ **์ฝ๊ธฐ ์ ์ฉ** (๋ฐ์ดํฐ ๋ณ๊ฒฝ ์์)์ด๋ฉฐ, `smartmontools`์ `e2fsprogs`๊ฐ ํ์ํฉ๋๋ค.
```bash
# SMART ์์ธ ์์ง (์ ๋์คํฌ)
sudo ./scripts/disk-check-smart.sh [์ถ๋ ฅ๋๋ ํ ๋ฆฌ]
# SMART Extended Self-Test ์์ (๋ณ๋ ฌ, ์ ์๊ฐ ์์)
sudo ./scripts/disk-check-smart-long.sh
# ๋ฐฐ๋์นํฐ ๊ฒ์ฌ (๋ณ๋ ฌ read-only, ์ ์๊ฐ~์์ญ ์๊ฐ)
sudo ./scripts/disk-check-badblocks.sh [์ถ๋ ฅ๋๋ ํ ๋ฆฌ]
# ๋ฐฐ๋์นํฐ ๊ฒ์ฌ ์งํ๋ฅ ๋ชจ๋ํฐ๋ง
./scripts/disk-check-progress.sh [์ถ๋ ฅ๋๋ ํ ๋ฆฌ]
watch -n 60 ./scripts/disk-check-progress.sh # 1๋ถ๋ง๋ค ์๋ ๊ฐฑ์
# .badblocks ํ์ผ์ 512๋ฐ์ดํธ ์นํฐ ๊ตฌ๊ฐ์ผ๋ก ๋ณํ (ํํฐ์
์ค๊ณ์ฉ)
./scripts/disk-badblocks-to-sectors.sh [์นํฐ์ฌ์ ]
```
| ์คํฌ๋ฆฝํธ | ์ฉ๋ | sudo |
|----------|------|------|
| `disk-check-smart.sh` | SMART ์์ธ ์์ง + ์์ฝ (Health, Reallocated, Pending) | Yes |
| `disk-check-smart-long.sh` | SMART Extended Self-Test ๋ณ๋ ฌ ์คํ | Yes |
| `disk-check-badblocks.sh` | ๋ณ๋ ฌ read-only ๋ฐฐ๋์นํฐ ๊ฒ์ฌ | Yes |
| `disk-check-progress.sh` | ๋ฐฐ๋์นํฐ ๊ฒ์ฌ ์งํ๋ฅ ํ์ฑ/ํ์ | No |
| `disk-badblocks-to-sectors.sh` | badblocks ๊ฒฐ๊ณผ๋ฅผ ์นํฐ ๊ตฌ๊ฐ์ผ๋ก ๋ณํ | No |
---
## Shell Integration Details
### Lazy Loading
NVM๊ณผ SDKMAN์ **lazy loading** ๋ฐฉ์์ผ๋ก ๊ตฌํ๋์ด ์
ธ ์์ ์๊ฐ์ ์ํฅ์ ์ฃผ์ง ์์ต๋๋ค:
```bash
# 30-nvm.sh: node/npm ์ต์ด ์คํ ์์๋ง NVM ๋ก๋
for cmd in nvm node npm npx; do
eval "${cmd}() { unset -f nvm node npm npx; _load_nvm; ${cmd} \"\$@\"; }"
done
```
์ค์ `node --version`์ ์ฒ์ ์คํํ๋ฉด ๊ทธ๋ NVM์ด ๋ก๋๋๊ณ , ์ดํ์๋ ์ง์ ์คํ๋ฉ๋๋ค.
### Background Update Check
`aienv` ์คํ ์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์
๋ฐ์ดํธ ์ฒดํฌ๊ฐ ์ด๋ฃจ์ด์ง๋๋ค:
1. `~/.last-update-check` ํ์์คํฌํ ํ์ธ
2. 24์๊ฐ ์ด๋ด๋ฉด skip
3. `git fetch origin main --quiet` (๋ฐฑ๊ทธ๋ผ์ด๋)
4. ๋ก์ปฌ โ ๋ฆฌ๋ชจํธ์ด๋ฉด ์
๋ฐ์ดํธ ์๋ฆผ ์ถ๋ ฅ
### Secrets
`~/.bashrc.local`(๋๋ `~/.zshrc.local`)์ API ํค ๋ฑ ์ํฌ๋ฆฟ์ ์ ์ฅํฉ๋๋ค:
```bash
# ~/.bashrc.local (example)
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
export WANDB_API_KEY="..."
```
์ด ํ์ผ์ ์
ธ ์์ ์ ์๋์ผ๋ก source๋๋ฉฐ, **์ ๋ Git์ ์ปค๋ฐ๋์ง ์์ต๋๋ค**.
---
## Directory Structure
```
machine_setting/
โโโ setup.sh # Single-entry bootstrap (7-stage pipeline)
โโโ Makefile # make setup/update/push/status/doctor/uninstall
โโโ config/
โ โโโ default.conf # Default settings (Python 3.12, Node LTS, Java 21)
โ โโโ machine.conf.example # Machine-specific override template
โ โโโ gpu-index-urls.conf # PyTorch CUDA index URL mapping
โโโ packages/
โ โโโ requirements-core.txt # Platform-independent AI/ML
โ โโโ requirements-gpu.txt # NVIDIA CUDA packages
โ โโโ requirements-mps.txt # Apple Silicon MPS packages
โ โโโ requirements-cpu.txt # CPU-only fallback
โ โโโ requirements-data.txt # Data/DB packages
โ โโโ requirements-web.txt # Web/API packages
โโโ scripts/
โ โโโ detect-hardware.sh # GPU/CUDA/MPS/RAM/CPU detection
โ โโโ install-nvidia.sh # NVIDIA driver/CUDA/cuDNN/NCCL/enterprise tools
โ โโโ install-python.sh # uv + Python install
โ โโโ setup-venv.sh # venv creation + package install
โ โโโ install-node.sh # NVM + Node.js
โ โโโ install-java.sh # SDKMAN + Java
โ โโโ lib-checkpoint.sh # Checkpoint/rollback library (7-stage)
โ โโโ dry-run.sh # ์ ์ฒด ์์คํ
dry-run ์ง๋จ (7๋จ๊ณ)
โ โโโ preflight.sh # Pre-flight system check (NVIDIA ํฌํจ)
โ โโโ doctor.sh # Health check & recovery (NVIDIA ์ฒดํฌ ํฌํจ)
โ โโโ uninstall.sh # Component uninstaller (NVIDIA ํฌํจ)
โ โโโ sync.sh # Git sync (push/pull/status)
โ โโโ export-packages.sh # venv โ requirements export
โ โโโ check-env.sh # AI environment verification
โ โโโ check-secrets.sh # Secret leak scanner
โ โโโ gpu-doctor.sh # GPU ์ ์ฉ ๊ฑด๊ฐ ์ง๋จ (6๊ฐ ์น์
+ summary ๋ชจ๋)
โ โโโ gpu-persist-fix.sh # GPU ์์ ์ฑ ์๊ตฌ ์์ (GRUB, udev, modprobe, persistenced, watchdog, PCIe)
โ โโโ disk-check-smart.sh # SMART ์์ธ ์์ง
โ โโโ disk-check-smart-long.sh # SMART Extended Self-Test
โ โโโ disk-check-badblocks.sh # ๋ณ๋ ฌ ๋ฐฐ๋์นํฐ ๊ฒ์ฌ
โ โโโ disk-check-progress.sh # ๋ฐฐ๋์นํฐ ๊ฒ์ฌ ์งํ๋ฅ ๋ชจ๋ํฐ
โ โโโ disk-badblocks-to-sectors.sh # badblocksโ์นํฐ ๊ตฌ๊ฐ ๋ณํ
โโโ shell/
โ โโโ install-shell.sh # Shell RC installer
โ โโโ bashrc.d/ # Modular shell config (bash + zsh)
โ โโโ 00-path.sh # PATH (CUDA, Homebrew, uv)
โ โโโ 10-aliases.sh # Common aliases
โ โโโ 20-env.sh # Environment variables
โ โโโ 30-nvm.sh # NVM lazy loader
โ โโโ 40-sdkman.sh # SDKMAN lazy loader
โ โโโ 50-ai-env.sh # aienv/aienv-off + update check
โ โโโ 90-local.sh.example # Secrets template
โโโ profiles/ # Pre-configured machine profiles
โ โโโ gpu-enterprise.conf # A100/H100/B200 + enterprise tools (DCGM, FM)
โ โโโ gpu-workstation.conf
โ โโโ cloud-server.conf
โ โโโ mac-apple-silicon.conf
โ โโโ ngc-container.conf
โ โโโ cpu-server.conf
โ โโโ laptop.conf
โ โโโ minimal.conf
โโโ docs/ # System documentation
โโโ package-candidates-analysis.md # ํจํค์ง ํ๋ณด ๋ถ์ (์ถ๊ฐ ์ถ์ฒ/์ ํ/๋น์ถ์ฒ)
```
---
## State & Configuration Files
### ๋ฐํ์ ์ํ ํ์ผ (Git ์ธ๋ถ)
| ํ์ผ | ์์น | ์ฉ๋ |
|------|------|------|
| `install.state` | `~/.machine_setting/` | 7๋จ๊ณ ์ค์น ์งํ ์ํ (STAGE_1~7) |
| `backups/` | `~/.machine_setting/backups/` | .bashrc/.zshrc ์๋ ๋ฐฑ์
(์
ธ ํตํฉ ์ค์น/์
๋ฐ์ดํธ ์ ํ์์คํฌํ๋ณ ์์ฑ) |
| `.machine_setting_profile` | `~/` | ํ๋์จ์ด ๊ฐ์ง ๊ฒฐ๊ณผ |
| `.last-update-check` | ์ ์ฅ์ ๋ด | ๋ง์ง๋ง ์
๋ฐ์ดํธ ์ฒดํฌ ํ์์คํฌํ |
| `.preflight_plan` | `env/` | Pre-flight ๊ณํ (์์, ์ค์น ํ ์ญ์ ) |
### ์ค์ ํ์ผ
| ํ์ผ | ์์น | ์ฉ๋ | Git ํฌํจ |
|------|------|------|----------|
| `default.conf` | `config/` | ๊ธฐ๋ณธ ์ค์ | Yes |
| `machine.conf` | `config/` | ๋จธ์ ๋ณ ์ค๋ฒ๋ผ์ด๋ | No (.gitignore) |
| `gpu-index-urls.conf` | `config/` | CUDAโPyTorch URL ๋งคํ | Yes |
| `*.conf` | `profiles/` | ํ๋ฆฌ์
ํ๋กํ | Yes |
| `.bashrc.local` | `~/` | ์ฌ์ฉ์ ์ํฌ๋ฆฟ | No |
---
## Troubleshooting
ํ๊ฒฝ ๊ตฌ์ฑ ์ค ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ฉด [docs/troubleshooting.md](docs/troubleshooting.md)๋ฅผ ์ฐธ๊ณ ํ์ธ์.
### ๋น ๋ฅธ ์ง๋จ
```bash
# ์ ์ฒด ๊ฑด๊ฐ ์ฒดํฌ
make doctor
# ํจํค์ง ๋ฌด๊ฒฐ์ฑ ๊ฒ์ฆ
make verify
# ์์คํ
์ํ ํ์ธ (์ค์น ์ํจ)
make plan
# ํ๊ฒฝ ์์ธ ํ์ธ (GPU, ํจํค์ง ๋ฒ์ )
make check
```
### ์์ฃผ ๋ฐ์ํ๋ ๋ฌธ์
| ์ฆ์ | ํด๊ฒฐ |
|------|------|
| `aienv: command not found` | `source ~/.bashrc` ๋๋ ์ ํฐ๋ฏธ๋ ์ด๊ธฐ |
| `No venv at ~/ai-env` | `make venv` ๋๋ `./setup.sh --from 4` |
| GPU๊ฐ ๊ฐ์ง๋์ง ์์ | `make detect` ํ `make doctor` |
| ํจํค์ง import ์คํจ | `make verify` โ `make recover` |
| ์ค์น ์ค๊ฐ์ ์คํจ | `./setup.sh --resume` |
| ์
ธ ์ค์ ์ด ๊นจ์ง | `./scripts/doctor.sh --recover shell` (๋ฐฑ์
์์ ๋ณต์) |
| GPU ๋ฒ์ค ์ดํ (Xid 79) | `sudo ./scripts/gpu-persist-fix.sh` ์คํ ํ ๋ฆฌ๋ถํธ |
| GPU ์ํ ๋ถ์์ | `./scripts/gpu-doctor.sh` ๋ก ์ง๋จ |
| `make venv`๊ฐ core ๋จ๊ณ ์งํ ์ฆ์ ์ข
๋ฃ | ์ 6-stage state ํ์ผ ์์ฌ. `mv ~/.machine_setting/install.state{,.bak}` ํ ์ฌ์คํ ([7-A](docs/troubleshooting.md#7-a-์ฒดํฌํฌ์ธํธ-state-ํ์ผ-์คํค๋ง-mismatch--make-venv-์ฆ์-์ข
๋ฃ-stage-rename-์์ฌ)) |
| cx-Oracle `pkg_resources` ๋น๋ ์คํจ | setuptools 70+ ๋ถ๋ฆฌ ์ด์. ์๋ fix๋จ โ ์๋์ `uv pip install "setuptools<70" wheel` ํ `--no-build-isolation` ([7-B](docs/troubleshooting.md#7-b-cx-oracle-๋น๋-์คํจ--modulenotfounderror-no-module-named-pkg_resources)) |
| ๊ฒ์ฆ ๋จ๊ณ๊ฐ `torch: not installed` ์คํ | bash quote escape ๋ฒ๊ทธ. ์๋ fix๋จ โ ์ค์ ์ค์น ์ฌ๋ถ๋ `~/ai-env/bin/python -c 'import torch'`๋ก ํ์ธ ([7-C](docs/troubleshooting.md#7-c-setup-venvsh-๊ฒ์ฆ-๋จ๊ณ๊ฐ-torch-not-installed-false-negative)) |
---
## Security
- Secrets go in `~/.bashrc.local` or `~/.zshrc.local` (never committed)
- Pre-commit hook blocks AWS keys, GitHub PATs, API keys
- Repository is **PRIVATE**
- Run `make secrets` to scan for leaked credentials