SKRueue๋ Kubernetes์ Kueue ์ค์ผ์ค๋ฌ์ ๊ฐํํ์ต(Reinforcement Learning)์ ์ ์ฉํ์ฌ ์์ ์ค์ผ์ค๋ง์ ์ต์ ํํ๋ ์์คํ ์ ๋๋ค.
RL ํ๋ จ์ ์ํ ๊ณต๊ฐ ๋ฐ์ดํฐ ์ ์ ์๋ ๋งํฌ์์ ์ ๊ณต๋ฐ์ ์ ์์ต๋๋ค. (Ensurance due: 2025.06.30) https://drive.google.com/file/d/1Hiv4E8SJtf5m0xzbIgdDhXY-Tt0QfqJq/view?usp=sharing
- 67์ฐจ์ ์ํ ๊ณต๊ฐ: ํด๋ฌ์คํฐ ์ํ์ ์์ ํ ์ ๋ณด๋ฅผ ํฌํจํ ํ๋ถํ ์ํ ํํ
- ๋ค์ํ RL ์๊ณ ๋ฆฌ์ฆ: DQN, PPO, A2C ์ง์
- ์ค์๊ฐ ๋ฐ์ดํฐ ์์ง: ํด๋ฌ์คํฐ ๋ฉํธ๋ฆญ๊ณผ ์์ ์คํ ๋ฐ์ดํฐ ์๋ ์์ง
- ํ์ค์ ์ธ ์ํฌ๋ก๋ ์๋ฎฌ๋ ์ด์ : ์๊ฐ๋๋ณ ํจํด์ ๋ฐ์ํ ์์ ์์ฑ
- ์ฑ๋ฅ ๋ฒค์น๋งํฌ: ๊ธฐ์กด ์ค์ผ์ค๋ฌ์์ ์ฑ๋ฅ ๋น๊ต ๋๊ตฌ ๋ด์ฅ
- Python 3.8+
- Kubernetes ํด๋ฌ์คํฐ (1.20+)
- Kueue ์ค์น (์ ํ์ฌํญ)
- kubectl ์ค์
git clone https://github.com/yourusername/skrueue.git
cd skrueuepython -m venv venv
source venv/bin/activate # Linux/Mac
# or
venv\Scripts\activate # Windows
pip install -r requirements.txtpython main.py setup์ด ๋ช ๋ น์ ๋ค์์ ์ํํฉ๋๋ค:
- Kubernetes ์ฐ๊ฒฐ ํ์ธ
- ํ์ํ ๋ค์์คํ์ด์ค ์์ฑ
- RBAC ๊ถํ ์ค์
- ๋๋ ํ ๋ฆฌ ๊ตฌ์กฐ ์์ฑ
- ๊ธฐ๋ณธ ์ค์ ํ์ผ ์์ฑ
skrueue/
โโโ core/ # ํต์ฌ ๋ชจ๋
โ โโโ environment.py # RL ํ๊ฒฝ (67์ฐจ์ ์ํ ๊ณต๊ฐ)
โ โโโ agent.py # RL ์์ด์ ํธ (DQN/PPO/A2C)
โ โโโ interface.py # Kueue ์ธํฐํ์ด์ค
โโโ utils/ # ๊ณตํต ์ ํธ๋ฆฌํฐ
โ โโโ k8s_utils.py # Kubernetes ํฌํผ
โ โโโ resource_parser.py # ๋ฆฌ์์ค ํ์ฑ
โ โโโ logger.py # ๋ก๊น
โโโ data/ # ๋ฐ์ดํฐ ๊ด๋ฆฌ
โ โโโ collector.py # ์ค์๊ฐ ์์ง
โ โโโ database.py # SQLite ๊ด๋ฆฌ
โ โโโ exporter.py # CSV ๋ด๋ณด๋ด๊ธฐ
โโโ workload/ # ์ํฌ๋ก๋ ์์ฑ
โ โโโ generator.py # ํตํฉ ์์ฑ๊ธฐ
โ โโโ templates.py # ์์
ํ
ํ๋ฆฟ
โ โโโ strategies.py # ์์ฑ ์ ๋ต
โโโ test/ # ํ
์คํธ ๋ฐ ๋ฒค์น๋งํฌ
โ โโโ integration.py # ํตํฉ ํ
์คํธ
โ โโโ benchmark.py # ์ฑ๋ฅ ๋ฒค์น๋งํฌ
โ โโโ monitor.py # ๋ชจ๋ํฐ๋ง
โโโ scripts/ # ์คํ ์คํฌ๋ฆฝํธ
โ โโโ setup.py # ํ๊ฒฝ ์ค์
โ โโโ run_experiment.py # ์คํ ์คํ
โ โโโ collect_data.py # ๋ฐ์ดํฐ ์์ง
โโโ config/ # ์ค์ ํ์ผ
โ โโโ settings.py # ์ค์ ์ค์ ๊ด๋ฆฌ
โโโ main.py # ๋ฉ์ธ ์ง์
์
# 24์๊ฐ ๋์ ํ์ค์ ์ธ ํจํด์ผ๋ก ๋ฐ์ดํฐ ์์ง
python main.py collect --duration 24 --strategy realistic
# ์ํฌ๋ก๋ ์์ฑ ์์ด ๊ธฐ์กด ํด๋ฌ์คํฐ ๋ฐ์ดํฐ๋ง ์์ง
python main.py collect --no-workload# DQN ๋ชจ๋ธ ํ๋ จ (๊ธฐ๋ณธ๊ฐ: 20,000 ์คํ
)
python main.py train --algorithm DQN --timesteps 50000
# PPO ๋ชจ๋ธ ํ๋ จ
python main.py train --algorithm PPO --timesteps 100000 --name my_experiment# ํ๋ จ๋ ๋ชจ๋ธ๋ก ์ค์๊ฐ ์ค์ผ์ค๋ง
python main.py inference --model models/skrueue_dqn_model --namespace skrueue-test# 30๋ถ ๋์ ๋ชจ๋ ์๊ณ ๋ฆฌ์ฆ ๋น๊ต
python main.py benchmark --duration 30 --algorithms DQN PPO A2C
# ํน์ ์๊ณ ๋ฆฌ์ฆ๋ง ํ
์คํธ
python main.py benchmark --duration 15 --algorithms DQN --name quick_test# ํตํฉ ํ
์คํธ ์คํ
python main.py testconfig/skrueue.yaml ํ์ผ์ ์์ ํ์ฌ ์ค์ ์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค:
# Kueue ์ค์
kueue:
namespaces: [skrueue-test, default]
max_queue_size: 10 # ์ํ ๊ณต๊ฐ์ ์์
ํ ํฌ๊ธฐ
# RL ์ค์
rl:
algorithm: DQN
learning_rate: 0.0001
training_steps: 20000
reward_weights:
throughput: 0.4 # ์ฒ๋ฆฌ๋ ๋ณด์ ๊ฐ์ค์น
utilization: 0.3 # ์์ ํ์ฉ๋ ๋ณด์
wait_penalty: 0.2 # ๋๊ธฐ์๊ฐ ํ๋ํฐ
failure_penalty: 0.1 # ์คํจ ํ๋ํฐ
# ๋ฐ์ดํฐ ์์ง ์ค์
data:
collection_interval: 10 # ์ด ๋จ์
db_path: data/skrueue_training_data.dbSKRueue๋ 67์ฐจ์ ์ํ ๊ณต๊ฐ์ ์ฌ์ฉํฉ๋๋ค:
- ์ฐจ์ 0-3: ํด๋ฌ์คํฐ ๋ฆฌ์์ค ์ ๋ณด
- CPU ๊ฐ์ฉ๋ฅ , ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ฉ๋ฅ , CPU ์ฌ์ฉ๋ฅ , ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋ฅ
- ์ฐจ์ 4-6: ํด๋ฌ์คํฐ ํ์คํ ๋ฆฌ
- ์คํ ์ค์ธ ์์ ์, CPU ์ฌ์ฉ๋ฅ (ํ์คํ ๋ฆฌ), ์ต๊ทผ OOM ๋ฐ์๋ฅ
- ์ฐจ์ 7-66: ์์
ํ ์ ๋ณด (์ต๋ 10๊ฐ ์์
ร 6์ฐจ์)
- ๊ฐ ์์ : CPU ์์ฒญ, ๋ฉ๋ชจ๋ฆฌ ์์ฒญ, ์ฐ์ ์์, ๋๊ธฐ์๊ฐ, ์์ ์คํ์๊ฐ, ์์ ํ์
๋ฒค์น๋งํฌ์์ ์ธก์ ํ๋ ์ฃผ์ ์งํ:
- ์ฒ๋ฆฌ๋ (Throughput): ์๊ฐ๋น ์๋ฃ๋ ์์ ์
- ํ๊ท ๋๊ธฐ์๊ฐ: ์์ ์ ์ถ๋ถํฐ ์คํ๊น์ง์ ์๊ฐ
- ์ฑ๊ณต๋ฅ : ์ฑ๊ณต์ ์ผ๋ก ์๋ฃ๋ ์์ ์ ๋น์จ
- ์์ ํ์ฉ๋: CPU/๋ฉ๋ชจ๋ฆฌ ํ๊ท ์ฌ์ฉ๋ฅ
- OOM ๋ฐ์๋ฅ : Out-of-Memory๋ก ์คํจํ ์์ ์
workload/templates.py์์ ์๋ก์ด ์์
ํ
ํ๋ฆฟ์ ์ถ๊ฐํ ์ ์์ต๋๋ค:
JobTemplate(
name="custom-task",
category="custom",
cpu_request="2000m",
memory_request="8Gi",
estimated_duration=30,
priority=7,
command=["python", "my_script.py"]
)core/environment.py์ _calculate_reward() ๋ฉ์๋๋ฅผ ์์ ํ์ฌ ๋ณด์ ํจ์๋ฅผ ์ปค์คํฐ๋ง์ด์ฆํ ์ ์์ต๋๋ค.
core/agent.py์ _get_network_architecture() ๋ฉ์๋๋ฅผ ์์ ํ์ฌ ์ ๊ฒฝ๋ง ๊ตฌ์กฐ๋ฅผ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
# kubeconfig ํ์ธ
kubectl cluster-info
# ์ปจํ
์คํธ ํ์ธ
kubectl config current-context# CRD ํ์ธ
kubectl get crd | grep kueue
# Kueue ์ค์น (ํ์์)
kubectl apply --server-side -f https://github.com/kubernetes-sigs/kueue/releases/download/v0.6.2/manifests.yamlconfig.rl.buffer_size๊ฐ์ ์ค์ด์ธ์- ๋ฐฐ์น ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ์ธ์
- Fork the repository
- Create your feature branch (
git checkout -b feature/AmazingFeature) - Commit your changes (
git commit -m 'Add some AmazingFeature') - Push to the branch (
git push origin feature/AmazingFeature) - Open a Pull Request
์ด ํ๋ก์ ํธ๋ MIT ๋ผ์ด์ ์ค ํ์ ๋ฐฐํฌ๋ฉ๋๋ค.
- ๋ถ์ฐ ํ๋ จ ์ง์
- ๋ ๋ง์ RL ์๊ณ ๋ฆฌ์ฆ ์ถ๊ฐ (SAC, TD3)
- ์น ๊ธฐ๋ฐ ๋์๋ณด๋
- Prometheus ๋ฉํธ๋ฆญ ํตํฉ
- ๋ค์ค ํด๋ฌ์คํฐ ์ง์
์ฃผ์: ์ด ํ๋ก์ ํธ๋ ์ฐ๊ตฌ ๋ชฉ์ ์ผ๋ก ๊ฐ๋ฐ๋์์ต๋๋ค. ํ๋ก๋์ ํ๊ฒฝ์์ ์ฌ์ฉํ๊ธฐ ์ ์ ์ถฉ๋ถํ ํ ์คํธ๋ฅผ ์ํํ์ธ์.