대학원 일기

폐쇄망 AI모델 버전관리 using Git! 본문

Computer programming/Git

폐쇄망 AI모델 버전관리 using Git!

대학원생(노예) 2024. 12. 15. 00:31

음.. 깃 사용법보다 깃 버전관리를 먼저 올리는게 맞나 싶지만, 
제 정리를 목적으로 하는거기 때문에, 먼저 정리하고 싶은 것부터 하겠습니다..! 하하 
 
사실, 깃 사용법이나 그런 자잘한 애들은 다른 블로그나 유튭에 잘 설명되어 있어, 생략해도 되지 않을까 생각합니다 ㅎ
(나중에 시간되면 깃 클론부터 풀리퀘, Merge까지 정리해보겠습니다)
 


제가 Git 버전 관리를 사용하기 전까지, 그냥 깃허브에 올리고 저장소 느낌으로 사용했었는데, AI에서 깃으로 버전관리를 하니 편한 것을 알아 정리해보고자 합니다! 
본 포스팅에선, 깃 기본 사용법을 아는 것을 기준으로 작성하겠습니다
 
깃 버전관리에 대해 알려면 우선 Git의 단계를 알아야하고, 어디에서 어떻게 관리되는지를 알아야 합니다. 
 
Git의 단계는 크게 4가지 로 나눌 수 있습니다. 

  1. Workspace 
  2. Stage (Staging Area)
  3. Local Repository
  4. Remote Repository

각 단계에 대해 간단히 설명하자면, 

  • Workspace는 Local에서 작업/코딩하는 환경. 즉, 개발하는 위치의 폴더라고 볼 수 있겠습니다. 
  • Stage는 커밋 전의 준비하는 단계로 임시 저장소 느낌입니다. 여기선. 변경된 걸 다음 단계인 Local Repo로 스테이징합니다. 저희가 깃으로 Add하고 커밋하기 전에 막 이것저것 치면서 놀잖아요? 그런거라고 보면 되겠죠? 허허 
  • Local Repository는 사용자의 Local에 저장된 Git 저장소입니다. 이 Git 저장소가 어디있을까요? 처음에 깃으로 데리고오거나 새로운 프로젝트를 만들면 해당 프로젝트가 있는 Workspace에 .git이라는 숨김 폴더가 생깁니다. 이 곳에 저희가 커밋 날려서 변경되는 모든 사항들이 .git 폴더에 모두 기록됩니다. 즉, 커밋을 통해 변경사항들이 snapshot으로, 히스토리 내역에 기록됩니다. 이 폴더에 Local 상에서 프로젝트의 모든 버전 기록이 관리됩니다. 여기에 있다면 네트워크에 연결되어 있지 않아도 버전 기록을 조회해서 복구할 수 있겠죠? 
Git Local Repository
  • Remote Repository는 단순해요. 깃허브 저장소입니다. push하면 Local에서 깃헙으로 보내는거고, pull하면 깃허브에서 Local로 땅겨오겠죠. 

깃의 단계에 대해 알았으니, 깃 버전관리에 대해 알아야겠지요. 
 
버전관리는 앞에서 말한 커밋할 때, 버전을 써서 보냅니다. 
커밋 내용을 작성하는 기준을 깃 컨벤션이라고 하는데, 이건 회사마다 다 달라요. 
보통 fix, add, modify, refactor, test 등 쓰는 것 같네요. 
깃 커밋 컨벤션은 타 블로그 내용을 보는 걸 추천드릴게요. 다 말이 달라서 ㅋㅋ 회사에 맞추거나 본인 기준에 맞추는 걸 추천드립니다. 
 
대체로 프로젝트를 들어가면 버전 xxx 이렇게 쓰잖아요? 뭐 유명한 게임들에도 있고, 당장 롤만 봐도 있을걸요? ㅋㅋ 
V.1.1이라는 프로젝트가 있다고 치면, 
V.1.x 에서 x는 기능을 추가하면 단계를 올립니다. 새로운 기능들 있자나요. 롤로 따지자면, 챔피언들 버프, 너프 그런 거? 하면 뒤에꺼를 올리고, 
v.x.1에서 앞에 x는 아예 전반적으로 큰 규모로 업데이트 될 때 단계를 올립니다. 롤로 따지자면, 맵 바뀌거나 시즌 바뀌거나 대규모 업데이트 하잖아요? 그런거죠. 피파로는 로스터패치라고 하나? 잘 기억이 안나네요 ㅋㅋ  
 
뭐튼 이런식으로 버전을 작성합니다. 
커밋 메세지로는 그러면 v1.x / 수정 내용 / Todo 이런 걸 적겠죠? 


그리고, 또 말할 게 뭐 면접이나 어디에서 버전관리 어떻게 하냐고 물어보면? 아래처럼 말하면 돼요. 
"Fast Forward Merging으로 버전 관리합니다~ "
Fast Forward Merging은 그냥 단순해요. 
Main, Dev 등으로 나눠서 개발하는거에요. 다 알고있는 거고, 기본이잖아요. 
저렇게 말하는 이유는 "있어보이기" 위해서 입니다. 라고 말할 수도 있겠지만 구구절절 설명하는 것보다 단어 하나 알면 거기서 끝낼 수 있잖아요. 영양가 없는 얘기 오래해서 뭐합니까 ㅋㅋ 
 


사실 저는 백엔드나 이쪽에 대해서 현업자 수준으로는 알진 못해요. 인공지능 대학원생이 어떻게 알겠나요. 
백엔드를 전문가 수준으로 설계하고, 개발할...... 수도 있지만 지금 당장은 아니니깐요. 
 
AI 버전관리하는 법을 알아야겠지요. 
요즘 사람들은 DevOps처럼, 인공지능에서도 하는걸 MLOps 혹은 AIOps라고 한다더라고요. 예 뭐 그렇습니다. 그렇다고요. ㅎㅎ 
 
인공지능 버전관리는 대체로 간단합니다. 
딥러닝 코드는 모델 부분을 제외하면 대체로 간단하지 않습니까? 지금까진 그랬어요... 나중에 어려워질 수 있겠죠 뭐.. 
 
인공지능, 딥러닝에서 버전관리는 두 가지로 나뉠 수 있을 것 같습니다. 

  • 데이터셋, 로더, 모델, 학습, 테스트 코드 등의 개발 
  • 실험

이렇게 두 개로 나뉘어요. 
첫번째는 일반적인 것처럼 작성한 코드들을 저장하는 거죠. 이건 그냥 하면 되고, 일반적이니깐 넘어갈게요. 
 
두번째가 중요하다고 생각합니다. 
딥러닝은 실험을 자주 하게되거든요? 첫번째에서 만든 딥러닝 모델로 최적의 수치(평가)를 얻기 위해서는 수없이 많은 실험들을 해여해요. 모델도 수정할 수 있고, 짜잘한 기법들도 바꿀 수 있고, 학습 전략도 바꿀 수 있고, 하이퍼 파라미터는 수도 없이 바꾸죠. 데이터 증강기법이나 전처리 기법들도 있구요.
이런 세세한 과정들도 생각해야하고, 마지막엔 점수까지... 이런 걸 수동으로 기입하기엔 너무나 귀찮습니다. 그래서, 깃으로 관리하는거죠. 실험 기록해두는게 상당히 중요하거덩요. 
깃 커밋으로 버전 정보와 간략하게 수정사항을 입력하고, 점수까지 저장하면 코드 전체와 커밋 내용을 통해 어떤 부분이 수정되었는지 알 수 있잖아요. 너무 편하겠죠? 
 
커밋 메세지: v1.x / renset, learning rate: 1e-3, optim: , ... / Todo: 뭐하기
대충 이런식으로 작성하면 되겠죠. 
 
저는 현재, 완전 폐쇄망에서 딥러닝 모델을 학습하고 있는데, 현재 기준으로써 깃으로 버전관리하는게 제일 편합니다. 
완전 폐쇄망에서 버전관리하는 더 좋은 방법들이 있다면 알려주세요. ㅎㅎ (리눅스 환경입니다)


깃 단계도 알고, 버전관리에 대해서도 알았으니, 마지막으로 그 상태로 돌아가는 것도 알아봐야겠지요?
 
앞에서 말한대로, Local 상에서의 깃 버전관리를 봐야겠지요? Local Repository 과정에 대해 알아봅시다. 
Local Repo의 앞단계인 Stage에서 커밋을 날리면 .git 폴더에 기록이 남겨지겠지요? 
그걸 git log 명령어를 통해 확인합니다. 아래처럼요. 
 
commit a0617603e2295143c8a47b07a46a636d953159e1 (HEAD -> main)
이렇게 커밋 기록이 남겨진 걸 볼 수 있습니다. 
저기서, 알파벳이랑 숫자로 이루어진 건 해시값입니다. 
해시값은 암호화된 건데, 커밋한 내용이 암호화되어 저렇게 나오는 것입니다. 
 
이전에 커밋날렸던 버전으로 돌아가고 싶을 때, git checkout "해시값" 으로 넣으면 코드가 바뀔 것입니다. 
 
끝! 


 
다음으로는 저만의 딥러닝 프로젝트 모듈화에 대해 작성해보겠습니다~ 

'Computer programming > Git' 카테고리의 다른 글

Git과 GitHub  (0) 2023.11.01
Comments