Published on

๐Ÿ‘ฉโ€๐Ÿ’ป | ๋ฐ”๋‹ฅ๋ถ€ํ„ฐ ํ•˜๋Š” ์ธ๊ณต์ง€๋Šฅ: ์˜จ๋ณด๋”ฉํŽธ

์„œ๋ก 

๋ถ€๋„๋Ÿฌ์šด ๊ณ ๋ฐฑ์ด์ง€๋งŒ, ์ง€๋‚œ 2๋…„ ๋™์•ˆ ์ทจ์—…์„ ํ•‘๊ณ„ ์‚ผ์•„ ๋จธ์‹ ๋Ÿฌ๋‹์˜ ๋ณธ์งˆ์„ ๊นŠ๊ฒŒ ๋“ค์—ฌ๋‹ค๋ณด์ง€ ๋ชปํ–ˆ๋‹ค. ์„์‚ฌ ์‹œ์ ˆ๋ถ€ํ„ฐ ๋ฌธ์ œ๋ฅผ ์ข๊ฒŒ๋งŒ ๋ฐ”๋ผ๋ณด๋˜ ์Šต๊ด€์€ ์ง์žฅ ์ƒํ™œ์—์„œ๋„ ์ด์–ด์กŒ๊ณ , ๊ฒฐ๊ตญ ์ง€๋‚œ 2๋…„์€ ์Šค์Šค๋กœ๋„ ๋ฌด์—‡์„ ์•Œ๊ณ  ์žˆ๋Š”์ง€ ๋ชจํ˜ธํ•œ ์ƒํƒœ๋กœ ํ˜๋Ÿฌ๊ฐ€ ๋ฒ„๋ ธ๋‹ค.

์ด์ง ์‚ฌ์ด์˜ ๊ณต๋ฐฑ๊ธฐ์—๋„ ์ƒํ™ฉ์€ ๋น„์Šทํ–ˆ๋‹ค. ์›๋ฆฌ์— ๋Œ€ํ•œ ๊ณ ๋ฏผ ์—†์ด Input๊ณผ Output์—๋งŒ ์ง‘์ค‘ํ•ด ๋น ๋ฅด๊ฒŒ ๊ฒฐ๊ณผ๋งŒ ๋ฝ‘์•„๋‚ด๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์— ๋งค๋ชฐ๋˜์—ˆ๊ณ , ๋Œ์ด์ผœ๋ณด๋‹ˆ ์ด๋Š” ๋„ˆ๋ฌด๋‚˜ ํฐ ์‹œ๊ฐ„ ๋‚ญ๋น„์˜€๋‹ค.

์ด๋Ÿฌํ•œ ๋ฌธ์ œ๋Š” ํฌํŠธํด๋ฆฌ์˜ค๋ฅผ ์ค€๋น„ํ•˜๋Š” ๊ณผ์ •์—์„œ ์—ฌ์‹คํžˆ ๋“œ๋Ÿฌ๋‚ฌ๋‹ค. ๋‚ด ์ž‘์—…๋ฌผ ์–ด๋””์—๋„ "์™œ ์ด ๊ธฐ์ˆ ์„ ์ผ๋Š”๊ฐ€?"์— ๋Œ€ํ•œ ๋‹ต์€ ์—†์—ˆ๊ณ , ๋‹น์žฅ์˜ ์ˆ˜์น˜๋ฅผ ๋‚ด๊ธฐ์— ๊ธ‰๊ธ‰ํ–ˆ๋˜ ํ”์ ๋“ค๋งŒ ๋‚จ์•„์žˆ์—ˆ๋‹ค.

์•ž์œผ๋กœ ์งง์€ 1๋…„๋™์•ˆ์€ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณด๊ณ  ์™œ๋ผ๋Š” ์˜๋ฌธ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” top-to-bottom ์‹์˜ ํฌ์ŠคํŠธ๋ฅผ ์—ฐ์žฌํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

Back to basic but efficiently

๋‹จ์ˆœํžˆ ๊ธฐ๋ณธ์„œ ๋ฐ˜๋ณต์„ ํ•ด์„œ๋Š” ๋˜๋Š” ์ผ์ด ์•„๋‹ˆ๋ผ๊ณ  ํŒ๋‹จํ–ˆ๊ณ , ๊ธฐ๋ณธ์„œ๋“ค์„ ์ •๋ฆฌํ•œ ํฌ์ŠคํŠธ๋ฅผ ์ง€์›Œ๋‚˜๊ฐ€๋ฉด์„œ ๊ตณํžˆ๊ธฐ๋กœ ๋ฐ˜๋ณตํ•  ๊ฒƒ ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ์ด ํฌ์ŠคํŠธ๋Š” 4๋…„ ์ „์˜ ๋‚˜์˜€๋‹ค๋ฉด ์ด๋Ÿฐ ๊ฒƒ๋“ค์„ ํ–ˆ์„ ๊ฒƒ์ด๋‹ค๋ผ๋Š” ๋‚˜์˜ ์ˆ˜์Šต(?)๊ณผ ๋‚˜๋ฆ„์˜ ํ…œํ”Œ๋ฆฟ ๋งŒ๋“ค๊ธฐ ๊ณผ์ •์ด๋ผ๊ณ  ๋ณด๋ฉด ๋˜๊ฒ ๋‹ค.

ํ™˜๊ฒฝ์„ค์ •

ํ˜„์—…์—์„œ ๋ฐฐ์› ๋˜ ๊ฒƒ๋“ค๊ณผ ์•ฝ๊ฐ„์˜ ์‹คํ—˜์„ ํ•˜๋ฉด์„œ ๋‚ด๊ฐ€ ๊ฐœ์ธ์ ์œผ๋กœ ํŽธํ–ˆ๋‹ค๋Š” ๊ฒƒ๋“ค์„ ์ „๋ถ€ ๊ณต์œ ํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค. ์‚ฌ๋‚ด on-boarding์—์„œ ์ง์ ‘ ์ž‘์„ฑํ•œ ๊ฒƒ๋“ค์ธ๋ฐ, ๋ถ€์—ฐ ์„ค๋ช…์€ ํ•œ๊ตญ์–ด๋กœ ๋ณ„๋„๋กœ ์ฒจ๋ถ€ํ•œ๋‹ค.

Languages & OS

๋Œ€๋ถ€๋ถ„ paper with code๋Š” ubuntu ์œ„์—์„œ ๊ฐœ๋ฐœ๋œ ๊ฒƒ๋“ค์ด ๋งŽ๋‹ค. ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด coding style guide๋ฅผ ์ ์šฉํ•ด๋ณด๋Š” ๊ฒƒ์„ ์ถ”์ฒœํ•˜๋Š” ํŽธ์ด๋‹ค. ์•„๋ฌด๋ž˜๋„ ํ˜‘์—…์œผ๋กœ ๋“ค์–ด๊ฐ€๋ฉด ๊ฐ€๋…์„ฑ์— ์žˆ์–ด์„œ ํšจ๊ณผ๋ฅผ ๋ณธ ๊ฒฝํ—˜์ด ์žˆ๋‹ค.

  • Python 3.11 (Recommended, from 3.7 and up)
    sudo update-alternatives --config python
    
  • C++ (modern 17, 20 Recommended)
  • Linux Ubuntu 22.04 (Recommended) & wsl(if using windows os)
  • CUDA 12.X (Recommended)

Environments

๊ฐœ์ธ์ ์œผ๋กœ conda, boilerplate(if scratch) ์ด ์กฐํ•ฉ์„ ์ž์ฃผ ์“ด๋‹ค. ํ”„๋กœ์ ํŠธ ๊ด€๋ฆฌ์™€ ๊ทธ๋ž˜ํ”„ ๊ฐ€๋…์„ฑ์œผ๋กœ tensorboard๋ณด๋‹ค wandb ์‚ฌ์šฉํ•˜๋ ค๊ณ  ํ…Œ์ŠคํŠธ ์˜ˆ์ •์— ์žˆ๋‹ค. (2026.03.02 ์ถ”๊ฐ€: ํ™•์‹คํžˆ ํ…์ŠคํŠธ ๋กœ๊ทธ์™€ ๊ทธ๋ž˜ํ”„๋ฅผ ์‰ฝ๊ฒŒ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด์„œ ์ข‹๋‹ค. ํŠนํžˆ ์–ด๋””์—์„œ๋‚˜ ํ›ˆ๋ จ์ด ๋ณด์ด๋Š”๊ฒŒ ํ™•์‹คํžˆ ํŽธํ–ˆ๋‹ค. ํ–ฅํ›„ ์ด์™€ ๊ด€๋ จํ•ด์„œ๋Š” ๋”ฐ๋กœ ํฌ์ŠคํŠธ๋ฅผ ์ ์„ ์˜ˆ์ •์ด๋‹ค.)

Miniconda(Recommended) | venv(option)

All environments should be managed through conda or or virtual environments

๐Ÿค” What are the differences between these two?
๐Ÿ™‹ Venv is a more lightweight, independent virtual environment compared to conda. However, for managing ML environments comprehensively, conda is more suitable.

Boilerplates

If youโ€™re building a project from scratch, a boilerplate is a good option. Itโ€™s a pre-made starter template that saves time, ensures consistency, reduces errors, and follows best practices for new projects.

WandB

Issac Sim(option)

Issac sim is a simulation engine for reinforcement learning research(mostly on motion generation, control domain).

Check official documents for details.

Apache Spark(option)

While our lab doesn't currently handle large-scale data, Apache Spark could be a valuable option for future applications or when expanding to other domains.:

IDE

vscode

๊ฐœ์ธ์ ์œผ๋กœ vscode๋Š” extension ์‚ฌ์šฉ๊ณผ ๊ฐ€๋ฒผ์šด ๋ง›์— ์‚ฌ์šฉํ•œ๋‹ค. ์• ์šฉํ•˜๋Š” extension์€ ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

๐Ÿค” Why not using pycharm for python, ml researches?
๐Ÿ™‹ While pycharm excels at python debugging, our lab uses multiple languages (Python, C++), making a multi-language IDE like vscode more practical for unified tooling and workflow consistency.

  • Extensions:
    • for languages: python, autopep8 or black-formatter, isort, cmake
    • for utils**: git graph**, jupyter, marp, remote-ssh, vscode-icons, wsl
  • Format on save ctrl + shift + p > settings.json example:
    {
      "[python]": {
        "editor.defaultFormatter": "ms-python.black-formatter",
        "editor.formatOnSave": true,
        "editor.codeActionsOnSave": {
          "source.organizeImports": "explicit"
        }
      },
      "isort.args": ["--profile", "black"],
      "[json]": {
        "editor.defaultFormatter": "esbenp.prettier-vscode"
      },
      "github.copilot.nextEditSuggestions.fixes": false,
      "github.copilot.nextEditSuggestions.allowWhitespaceOnlyChanges": false,
      "editor.formatOnSave": true,
      "editor.formatOnSaveMode": "modificationsIfAvailable"
    }
    

visual studio 2022

CLI

Github

README for preparation & execution

Few useful tips of git:

  • git pull --rebase: make sure to pull git if collaborating with someone to prevent merge conflicts
  • git stash โ†’ test branch commit: preserves current commit
  • git status: track your git if something gets wrong.
  • commit by units(tasks, files etc)

Commit Message Format

  • [Tag] short desciption
    • ex. [Task] Add [FILENAME].py
TagMeaning
TaskNew task or feature
FixBug fix
RefactorCode restructure (no behavior change)
TestTests

Others

DVC

To manage large contents/data and codes seperately, we use dvc(data version control). What is DVC?

TDD

TDD ๊ฐœ๋ฐœ์€ ๊ฐœ์ธ ์„ ํ˜ธ๋„๋ผ๊ณ  ์ƒ๊ฐํ•˜๋Š” ํŽธ์ธ๋ฐ, ์ผ๋‹จ ๋ณธ์ธ์€ TDD๋ฅผ ํ•˜์ง€ ์•Š์œผ๋ฉฐ, ๋จผ์ € ๋งŒ๋“ค๊ณ  ๊ฒ€ํ† ํ•˜๋Š” ์ˆœ์œผ๋กœ ๊ฐœ๋ฐœํ•˜๋Š” ํŽธ์ด๋‹ค.

What is Test Driven Development?

๐Ÿค” So.. is it necessary?
๐Ÿ™‹ Our lab focuses on independent research, so this design approachโ€”mainly useful for long-term, multi-developer projectsโ€”means TDD is optional for us.

A/B test

๋ณดํ†ต ์„œ๋น„์Šค ๊ธฐ์—…์—์„œ ์‚ฌ์šฉ์ž ์„ ํ˜ธ๋„ ์‹คํ—˜์„ ์œ„ํ•œ ํ…Œ์ŠคํŠธ ๊ธฐ๋ฒ•์ด๋‹ค. ์•Œ๊ณ  ์žˆ์œผ๋ฉด ์ข‹์•„์„œ ์งง๋ง‰ํ•˜๊ฒŒ ์†Œ๊ฐœํ•œ๋‹ค.

What to see & How to see

๋จธ์‹ ๋Ÿฌ๋‹์„ ์‹œ์ž‘ํ•œ๋‹ค๊ณ  ํ–ˆ์„ ๋•Œ ์–ด๋–ค ์‹œ๊ฐ์œผ๋กœ ๋ด์•ผํ• ์ง€์— ๋Œ€ํ•œ ์–ด๋А ์ •๋„์˜ ๋ฐฉํ–ฅ์„ฑ์„ ๊ฐ€์ง€๊ณ  ์‹œ์ž‘ํ•˜๋Š”๊ฒŒ ์ข‹๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค.

  • top-to-bottom: ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณด๊ณ  -> ์™œ๋ผ๋Š” ์˜๋ฌธ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” ๋ฐฉ์‹
  • bottom-to-top: ์„ ํ˜•๋Œ€์ˆ˜์™€ ํ†ต๊ณ„ํ•™๋ถ€ํ„ฐ ์‹œ์ž‘ํ•ด์„œ -> ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณด๋Š” ๋ฐฉ์‹

ํ•˜๋ฃจ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์Ÿ์•„์ ธ ๋‚˜์˜ค๋Š” ๋…ผ๋ฌธ๋“ค๋กœ ๋Œ€๋ถ€๋ถ„์€ top-to-bottom ๋ฐฉ์‹์œผ๋กœ ์ ‘๊ทผํ•˜๋Š” ํŽธ์ด์ง€๋งŒ, ์ค‘์š”๋„ ์ƒ๊ด€์—†์ด ์–‘๋ฐฉํ–ฅ ๋ชจ๋‘ ์ค‘์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๊ทธ๋ž˜๋„ ์ ์–ด๋„ ๊ธฐ๋ณธ์ ์ธ ๊ฒƒ๋“ค์€ ์•Œ๊ณ  ์‹œ์ž‘ํ•˜๋Š” ๊ฒƒ์ด ๋งž๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ํ‹€์ด ์—†์œผ๋ฉด ๊ทธ ๋ชจ๋ธ์ด ์™œ ์„ฑ๋Šฅ์ด ์•ˆ๋‚˜์˜ค๋Š”์ง€ ๊ฑฐ์˜ ์‹œ๊ฐ„๋งŒ ํ—ˆ๋น„ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.(๋ณธ์ธ์ด ์‹ค์ œ๋กœ ๊ทธ๋žฌ๊ธฐ๋„ ํ•˜๋‹ค)

์–ด๋–ค ํฌ์ง€์…˜์„ ์žก๋ƒ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅด์ง€๋งŒ(application์ด๋‚˜ research์˜ ๋ฐฉํ–ฅ ๋“ฑ๋“ฑ) ๋”ฅ๋Ÿฌ๋‹์˜ ํฐ ํ‹€์€ ์ „ํ†ต์ ์ธ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ฐฉ๋ฒ•์„ ์ฐจ์šฉํ•ด์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜ํ•ด์„œ ์ •์ œํ•˜๊ณ  ์–ด๋–ค ๋ชจ์ˆ˜ ํ˜น์€ ๋น„๋ชจ์ˆ˜์ ์ธ ๋ฐฉ๋ฒ•์œผ๋กœ ํ™•๋ฅ ๋ถ„ํฌ๋ฅผ ๋งŒ๋“ ๋‹ค. ๊ทธ๋ž˜์„œ ๋ฐ์ดํ„ฐ๋ฅผ ์ž˜ ํ‘œํ˜„ํ•˜๋Š” ํ™•๋ฅ ๋ถ„ํฌ๋ฅผ ๋งŒ๋“œ๋Š” ๊ฒƒ์„ ํฐ ํ‹€๋กœ ์ƒ๊ฐํ•˜๋ฉด ์ข‹์„ ๊ฒƒ ๊ฐ™๋‹ค.

์„ ํ˜•๋Œ€์ˆ˜์™€ ํ†ต๊ณ„ํ•™

Bottom up์—์„œ ๊ณต๋ถ€ํ•˜๋ ค๋ฉด ์•„๋ž˜ ์ฑ…๋“ค์„ ์ถ”์ฒœํ•œ๋‹ค. ์—„์ฒญ๋‚œ(?) ์ •์„์€ ์•„๋‹ˆ์ง€๋งŒ ์–ด๋А์ •๋„ insight์–ป๋Š”๋ฐ๋Š” ๋„์›€์„ ๋งŽ์ด ์คฌ๋˜ ์ฑ…๋“ค์ด๋‹ค.

๐Ÿค” ๊ทธ๋ž˜์„œ ์ด๋Ÿฌํ•œ ๊ณผ์ •์ด ํ•„์ˆ˜์ธ๊ฐ€?
๐Ÿ™‹ ์ค‘์š”์„ฑ์„ ์œ„ํ•ด์„œ ์•„๋ž˜ ํŠธ์œ„ํ„ฐ ๊ธ€์„ ์ฒจ๋ถ€ํ•œ๋‹ค.

Summary

๋จธ์‹ ๋Ÿฌ๋‹/๋”ฅ๋Ÿฌ๋‹์— ์ž…๋ฌธํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋„์›€์ด ๋  ์ˆ˜ ์žˆ๋Š” ํ™˜๊ฒฝ์„ค์ •๊ณผ ๊ณต๋ถ€ ๋ฐฉํ–ฅ์„ฑ์— ๋Œ€ํ•œ ํฌ์ŠคํŠธ์˜€๋‹ค. ๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ๋ณธ๊ฒฉ์ ์œผ๋กœ ๋ชจ๋ธ์„ ๋งŒ๋“ค์–ด๋ณด๋ฉด์„œ ์™œ๋ผ๋Š” ์˜๋ฌธ์œผ๋กœ ์˜ฌ๋ผ๊ฐ€๋Š” top-to-bottom ๋ฐฉ์‹์œผ๋กœ ์ง„ํ–‰ํ•  ์˜ˆ์ •์ด๋‹ค.

Authors