├── .github ├── ISSUE_TEMPLATE │ ├── PULL_REQUEST_TEMPLATE.md │ └── feature_request.md └── workflows │ └── ci-cd.yml ├── .gitignore ├── .pre-commit-config.yaml ├── README.md ├── projects └── README.md └── pyproject.toml /.github/ISSUE_TEMPLATE/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ## 🎯 Description 2 | - 3 | 4 | ## 🔨 Change logs 5 | - 6 | 7 | ## 👥 To Reviewer 8 | - 9 | 10 | ## 🔗 Related Issue 11 | - Closed | Fixed: # 12 | - See also: # 13 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Issue Template 3 | about: Default Issue Template 4 | title: '' 5 | labels: '' 6 | assignees: '' 7 | 8 | --- 9 | 10 | ## 🧐 Background 11 | - 12 | 13 | ## 🚧 To-do 14 | - [ ] 15 | - [ ] 16 | 17 | ## 💬 See also 18 | - # 19 | -------------------------------------------------------------------------------- /.github/workflows/ci-cd.yml: -------------------------------------------------------------------------------- 1 | name: CI/CD Workflow 2 | 3 | on: 4 | push: 5 | branches: [ main, deployment ] 6 | pull_request: 7 | branches: [ main, deployment ] 8 | 9 | jobs: 10 | lint-and-test: 11 | strategy: 12 | matrix: 13 | os: [ubuntu-latest] 14 | # os: [ubuntu-latest, macos-latest, windows-latest] 15 | python-version: ['3.12'] 16 | # python-version: ['3.10', '3.11'] 17 | 18 | runs-on: ${{ matrix.os }} 19 | env: 20 | PYTHONPATH: ${{ github.workspace }} 21 | 22 | steps: 23 | - uses: actions/checkout@v4 24 | 25 | - name: Hadolint 26 | uses: hadolint/hadolint-action@v3.1.0 27 | continue-on-error: true 28 | 29 | - name: Set up Python ${{ matrix.python-version }} 30 | uses: actions/setup-python@v5 31 | with: 32 | python-version: ${{ matrix.python-version }} 33 | 34 | - name: Install Poetry 35 | uses: snok/install-poetry@v1 36 | with: 37 | virtualenvs-create: true 38 | virtualenvs-in-project: true 39 | 40 | - name: Load cached venv 41 | id: cached-poetry-dependencies 42 | uses: actions/cache@v3 43 | with: 44 | path: .venv 45 | key: venv-${{ runner.os }}-${{ hashFiles('**/poetry.lock') }} 46 | 47 | - name: Install dependencies 48 | if: steps.cached-poetry-dependencies.outputs.cache-hit != 'true' 49 | run: poetry install --no-interaction --no-root 50 | 51 | - name: Install package 52 | run: | 53 | poetry install --no-root 54 | 55 | - name: Run linters 56 | run: | 57 | poetry run ruff check --fix . 58 | poetry run ruff format . -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Cache files 2 | *.pyc 3 | *.exe 4 | *.log 5 | *__pycache__ 6 | .pytest_cache 7 | model_cache 8 | 9 | # Environment 10 | env 11 | .env 12 | *poetry.lock 13 | 14 | # Ruff 15 | -unsafe-fixes 16 | .ruff_cache 17 | .coverage -------------------------------------------------------------------------------- /.pre-commit-config.yaml: -------------------------------------------------------------------------------- 1 | exclude: | 2 | (?x)( 3 | # Docs 4 | ^.*\.md$| 5 | ^docs/| 6 | 7 | # Notebooks & WandB 8 | ^notebooks/| 9 | ^experiments/| 10 | ^wandb/| 11 | ^logs/| 12 | ^runs/| 13 | 14 | # Dataset & Model 15 | ^data/| 16 | ^datasets/| 17 | ^checkpoints/| 18 | ^weights/| 19 | ^.*\.pth$| 20 | ^.*\.ckpt$| 21 | ^.*\.h5$| 22 | ^.*\.onnx$| 23 | 24 | # Cache files 25 | ^.pytest_cache/| 26 | ^__pycache__/| 27 | 28 | ^\.env| 29 | ^\.vscode/ 30 | ) 31 | 32 | repos: 33 | - repo: https://github.com/pre-commit/pre-commit-hooks 34 | rev: v5.0.0 35 | hooks: 36 | - id: trailing-whitespace 37 | - id: end-of-file-fixer 38 | - id: check-yaml 39 | - id: check-toml 40 | - id: debug-statements 41 | - id: check-added-large-files 42 | args: ['--maxkb=1024'] 43 | 44 | 45 | - repo: https://github.com/astral-sh/ruff-pre-commit 46 | rev: v0.9.9 47 | hooks: 48 | - id: ruff 49 | args: [--fix, --exit-non-zero-on-fix] 50 | - id: ruff-format -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 |

Deep Learning Efficient Inference

3 | 4 |
5 | PseudoLab 6 | Discord Community 7 | Stars Badge 8 | Forks Badge 9 | Pull Requests Badge 10 | Issues Badge 11 | GitHub contributors 12 | 13 |
14 |
15 | 16 | 17 | 18 | 19 | 20 | 최근 AI 기술이 빠르게 발전하며 딥러닝 모델의 규모와 성능이 폭발적으로 증가하고 있습니다. 그러나 모델이 커질수록 **메모리 사용량**, **추론 시간**, **에너지 소모**가 급격히 증가하기 때문에, 효율적인 **경량화 기법**과 **추론 최적화**에 대한 수요도 높아지고 있습니다. 21 | 가지치기(Pruning), 양자화(Quantization), 지식 증류(Knowledge Distillation), 네트워크 구조 검색(NAS) 등을 통해 모델을 가볍게 만들고, 하드웨어 제약이 있는 환경에서도 충분한 성능을 낼 수 있게 하는 기술은 앞으로 더욱 중요해질 것입니다. 22 | 23 | 24 | ## 이번 시즌에 배울 지식 Introduction 25 | - **Pruning**: 모델 파라미터를 부분적으로 제거해 모델 크기를 줄이면서 성능은 최대한 유지하는 기법 26 | - **Quantization**: 파라미터를 낮은 정밀도로 표현해 계산량과 메모리 사용량을 절감하는 기법 27 | - **Knowledge Distillation**: 큰 모델의 지식을 작은 모델에 전이하여 경량화하면서도 높은 성능을 유지하는 기법 28 | - **Neural Architecture Search**: 다양한 아키텍처를 자동으로 탐색해 최적의 모델 구조를 찾는 기법 29 | 30 | 본 스터디에서는 이론적 지식뿐만 아니라, **실제 모델을 경량화하고 추론 효율을 개선**하는 일련의 실습 프로젝트를 통해 실전 감각을 키우려고 합니다. 31 | 32 | 33 | ## 왜 이걸 배워야 하는가? 34 | - 기업들의 효율적인 모델 서빙을 통해 클라우드 비용 절감과 엣지 디바이스 적용 필요성 증가 35 | - 대용량 데이터를 다루는 스타트업부터 대기업까지, AI 응용 분야 전반에서 모델 최적화 역량 요구 증가 36 | - LLM(대형 언어 모델), 컴퓨터 비전, 음성 인식 등 적용 범위가 넓고 활용 가치가 높음 37 | 38 | 39 | ## 배우면 어떤 이득이 있는가? 40 | - **AI 연구원**, **ML 엔지니어**, **Mobile/Edge device Developer**, **MLOps** 등 다양한 직무에 적용할 수 있는 스킬셋을 갖출 수 있습니다. 41 | - **인프라 비용** 최적화, on-device AI, IoT 솔루션 개발 등과 연계되어 국내외 주요 기업에 진출 가능성을 높일 수 있습니다. 42 | - 직접 경량화 프로젝트를 수행하면서, 현업에 필요한 실무 역량을 쌓을 수 있습니다. 43 | 44 | 45 | ## 🌟 프로젝트 개요 46 | 1. **이론 학습**: Pruning, Quantization, Knowledge Distillation, Network Architecture Search 등의 핵심 개념과 기법 학습 47 | - [MIT 6.5940 TinyML and Efficient Deep Learning Computing](https://hanlab.mit.edu/courses/2024-fall-65940) 강의를 기반으로 함 48 | 2. **실전 프로젝트 수행**: 실제 모델을 경량화하고 추론 최적화를 적용화해 경량화 전후 성능을 비교하는 프로젝트 수행 예정 49 | - 개인 또는 팀 단위로 프로젝트 제안 및 진행 50 | 51 | 52 | ## 🧑 팀 소개 53 | 54 | | 역할 | 이름 | LinkedIn | 55 | |---------------|------|-----------------------------------------------------------------------| 56 | | **Project Manager** | 박성수 | [Link](https://www.linkedin.com/in/seongsu-park/) | 57 | | **Member** | 김슬 | | 58 | | **Member** | 박동찬 | | 59 | | **Member** | 오새빛나 | | 60 | | **Member** | 윤남규 | | 61 | | **Member** | 이정수 | | 62 | 63 | 64 | 65 | 66 | ## 💻 주차별 계획 67 | 68 | | 날짜 | 내용 | Link | 69 | | -------- | -------- | ---- | 70 | | 2025/3/4 | OT | | 71 | | 2025/3/11 | Basics of Deep Learning
Transformers | [[Part 1]](https://github.com/Pseudo-Lab/EfficientML/discussions/3)
[[Part 2]](https://github.com/Pseudo-Lab/EfficientML/discussions/5) | 72 | | 2025/3/18 | Pruning and Sparsity (Part I)
Transformer Design Variants | [[Part 1]](https://github.com/Pseudo-Lab/EfficientML/discussions/6)
[[Part 2]](https://github.com/Pseudo-Lab/EfficientML/discussions/7) | 73 | | 2025/3/25 | ⭐ Magical Week 휴일 ⭐ | | 74 | | 2025/4/1 | Pruning and Sparsity (Part II)
Large language models
LLM Fine-Tuning | [[Part 1]](https://github.com/Pseudo-Lab/EfficientML/discussions/8)
[[Part 2]](https://github.com/Pseudo-Lab/EfficientML/discussions/9)| 75 | | 2025/4/8 | Quantization (Part I) | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/12) | 76 | | 2025/4/15 | Quantization (Part II) | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/13) | 77 | | 2025/4/22 | Neural Architecture Search (Part I) | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/14) | 78 | | 2025/4/29 | ⭐ Magical Week 휴일 ⭐ | | 79 | | 2025/5/6 | Neural Architecture Search (Part II) | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/20) | 80 | | 2025/5/13 | Knowledge Distillation | 미정 | 81 | | 2025/5/20 | MCUNet: TinyML on Microcontrollers | 미정 | 82 | | 2025/5/27 | TinyEngine and Parallel Processing | 미정 | 83 | 84 | > **매주 일정**: 85 | > - 스터디 전, 할당된 강의를 사전에 학습 (영어 자막 강의 + PPT 등) 86 | > - 스터디 시간에 강의 내용 토의 및 질의응답 87 | > - 개인 혹은 팀별 프로젝트 진행 상황 공유 및 피드백 88 | 89 | 90 | ## 💡 프로젝트 91 | | 제목 | 담당자 | Link | 92 | |---|---|---| 93 | | Face-based age classification | 박성수 | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/11) | 94 | | Practical Quantization of Open LLMs | 김슬 | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/19) | 95 | | Three Visions on One Edge | 박동찬 | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/18) | 96 | | Transformer Minimalism | 오새빛나 | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/16) | 97 | | | 윤남규 | | 98 | | Image Classification using simple models | 이정수 | [[Link]](https://github.com/Pseudo-Lab/EfficientML/discussions/17)| 99 | 100 | 105 | 106 | 107 | ## 🌱 참여 안내 108 | 109 | 111 | 112 | - 매주 화요일 오후 9시, 가짜연구소 Discord Room-IS 채널 113 | - 자유롭게 청강 가능합니다. 114 | 130 | 131 | 134 | 135 | ## About Pseudo Lab 👋🏼 136 | 137 | [Pseudo-Lab](https://pseudo-lab.com/) is a non-profit organization focused on advancing machine learning and AI technologies. Our core values of Sharing, Motivation, and Collaborative Joy drive us to create impactful open-source projects. With over 5k+ researchers, we are committed to advancing machine learning and AI technologies. 138 | 139 |

Contributors 😃

140 | 141 | 142 | 143 |

144 | 145 | 148 | -------------------------------------------------------------------------------- /projects/README.md: -------------------------------------------------------------------------------- 1 | 개인별 프로젝트 디렉토리를 만들어서 자유롭게 push하기 (디렉토리 이름: 프로젝트 이름) 2 | -------------------------------------------------------------------------------- /pyproject.toml: -------------------------------------------------------------------------------- 1 | [project] 2 | name = "EfficientML" 3 | version = "0.1.0" 4 | description = "" 5 | authors = [ 6 | {name = "Namgyu-Youn", email = "yynk2012@gmail.com"} 7 | ] 8 | readme = "README.md" 9 | packages = [] 10 | 11 | [build-system] 12 | requires = ["poetry-core>=2.0.0,<3.0.0"] 13 | build-backend = "poetry.core.masonry.api" 14 | 15 | [tool.poetry.dependencies] 16 | python = ">=3.11.0,<3.13" 17 | torch = {version = "2.6.0+cpu", source = "pytorch"} 18 | ruff = "^0.9.9" 19 | pytest = "^8.3.4" 20 | python-dotenv = "^1.0.0" 21 | 22 | [tool.poetry.group.dev.dependencies] 23 | pytest = "^8.3.4" 24 | pytest-cov = "^6.0.0" 25 | pytest-asyncio = "^0.25.3" 26 | 27 | [[tool.poetry.source]] 28 | name = "pytorch" 29 | url = "https://download.pytorch.org/whl/cpu" 30 | priority = "explicit" 31 | 32 | [tool.ruff] 33 | line-length = 160 34 | target-version = "py310" 35 | 36 | lint.select = [ 37 | "E", # pycodestyle 38 | "F", # pyflakes 39 | "UP", # pyupgrade 40 | "B", # flake8-bugbear 41 | "RUF", # Ruff-specific rules 42 | "I", # isort 43 | "C4", # flake8-comprehensions 44 | "N", # pep8-naming 45 | "S", # flake8-bandit 46 | ] --------------------------------------------------------------------------------