2023년 1월 10일 화요일

Mac Studio Ultra - 업무 활용기(Jupyter Lab, Notebook, Hub) - 1탄

Mac Studio Ultra - 업무 활용기(Jupyter Lab, Notebook, Hub) - 1탄


 나는 AI, ML 기술을 여러가지 업무에 적용하는 일을 하고 있다. 

팀원은 5명이고, 대부분 맥북프로 2019년식을 갖고 있다. 메모리도 32기가로 높은 편이나

맥북의 가장 큰 단점 GPU가 없다는 것.. 있지만 무용지물..

그래서 지금 까지는 대부분 CPU 기반으로 알고리즘을 구동했다. 시간이 오래 걸려도 참고...

Colab 도 써보고... 

드디어 2023년 Mac Studio Ultra를 구매했다. 

모든 팀원들이 이 환경에서 개발할 수 있도록 환경을 구축 하고 있다.

일단 너무 기쁜데, 애플이 자랑하는 만큼 성능이 되거나 5천만원짜리 머신러닝 서버를 살 수 있으면 좋겠다.


0. 개요

  • Spec & 버전
    • Mac OS Ventura 13.1
    • CPU 20 Core, GPU : 64 Core, Neural Engine : 32 Core, RAM 128G, HDD : 4TB
    • 10기가 이더넷... 그러나 회사 스위치 1기가
  • 사전 작업
    • OS 최신 업데이트 실시
    • xcode 등 developer tool 설치

1. 설치 환경

  • IP
    고정 IP를 할당 받아서 사용했다.

  • User 생성
    사용자비밀번호비고
    jupyter1dfdfd......1관리자

  • 공유 설정
    • 웹으로 지원할 거라 따로 공유는 설정하지 않았다.

2. 설치

2.1 필수 소프트웨어 설치

2.1.1 Rosetta & Xcode Command Line Tools & Chrome 설치

  • Rosetta 2설치 : https://musclebear.tistory.com/127
    // 1. 라이센스 동의 필요
    $ softwareupdate --install-rosetta
    
    // 2. 라이선스 자동 동의
    $ /usr/sbin/softwareupdate --install-rosetta --agree-to-license
    
    
  • Xcode Command Line Tools
    $ xcode-select --install
    

2.1.2 iterm2

  • https://iterm2.com/
  • iterm2에서 한글 깨짐 해결 : 애플의 문자셋<NFC>과 MS<NFD>의 문자셋이 다름
    Menu > Preference > Profiles > Text 의 하단에 Unicode normalization from : [NFC]로 변경
  • 필요시 폰트 설치

2.1.3 homebrew

$ /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" 
$ brew update
$ brew upgrade
  • 표준 사용자 사용하도록 그룹 추가 및 brew 그룹 변경
    1. 설정 > 사용자 및 그룹 에서 그룹 생성 brew
    2. brew 그룹에 표준 사용자 그룹 추가
    3. brew 디렉토리 그룹 변경
      $ sudo chgrp -R brew /opt/homebrew
      

2.1.4 wget & curl & openssl

$ brew install wget
$ brew install curl
$ brew install openssl

2.1.5 zsh & oh-my-szh

$ brew install zsh
$ brew upgrade zsh
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)" 
$ vi ~/.zshrc
  ZSH_THEME="eastwood" 로 변경 후 저장
$ source ~/.zshrc

2.1.6 pyenv, pyenv-virtualenv & python & poetry

2.1.6.1 pyenv & python 설치
$ brew install pyenv
$ pyenv install --list
$ pyenv install 3.11.1
$ pyenv global 3.11.x
$ pyenv local 3.11.x
2.1.6.3 pyenv-virtualenv & 가상환경 만들기
$ brew install pyenv-virtualenv
... installing....

$ vi ~/.zshrc
-- 아래 추가 : 이미 있을 수 있음 --
# pyenv command
eval "$(pyenv init -)" 

# pyenv-virtualenv command
eval "$(pyenv virtualenv-init -)" 
$ source ~/.zshrc

# create virtual environment
$ pyenv virtualenv PYTHON-VERSION ENVIRONMENT-NAME

# check available virtual environments in local
$ pyenv virtualenvs

# delete VIRTUAL ENVIRONMENT
$ pyenv uninstall ENVIRONMENT-NAME

# activate virtual environment
$ pyenv activate ENVIRONMENT-NAME

# GET OUT OF VIRTUAL ENVIRONMENT
$ pyenv deactivate
2.1.6.3 python 필수 라이브러리
  • 가상환경을 활성화 하고 하면 된다. 패키지는 가상환경에만 적용된다.
# install and upgrade pip
$ python3 -m pip install --upgrade pip  혹은 
$ pip install --upgrade pip

# check available packages
$ pip list
  필요한 패키지는 가상환경에서 다시 설치해야 한다.

# 필수 패키지 
$ pip install package1, package2, ...
2.1.6.4 poetry
  • 목적 : 프로젝트<디렉토리>별 패키지를 설치하고 관리해준다.
  • poetry 설치
    • # poetry curl 로 최신버전 설치하기
      $ curl -sSL https://install.python-poetry.org | python3 -
      
      # brew 로 설치하기
      $ brew install poetry
      
  • python 3.10.4 까지는 되나, 3.11.x 부터 안된다. poetry가 아직 python 3.11.x 는 지원하지 않음
    • 문제
      에러내용 : from cleo import Application as BaseApplication 
      
    • 해결
      $ cd ~/.poetry/lib/poetry/_vendor
      $ cp -R py3.10 py3.11
      
  • poetry project 생성
    $ mkdir -p ~/test/poetry/prj1
    $ cd ~/test/poetry/prj1
    $ poetry init   --> pyproject.toml 이 생김
    $ poetry shell  --> 이걸로 해야 됨.
    $ poetry add fastapi aiohttp  ==> 패키지명에 [ 문자, 공백이 있으면 " 로 묶어서 설치
    
    $ poetry shell
    > 가상환경 안에서는 이미 활성화되어있어서 메시지 발생 : Virtual environment already activated: /Users/keunsookim/.pyenv/versions/3.11.1/envs/py3.11.1
    
2.1.6.4 pyenv, pyenv-virtualenv, poetry 권장 사용법 <python 3.11.1 버전 기준>
  • 1) pyenv-virtualenv 로 파이썬 버전에 맞는 가상환경 생성 및 활성화
       $ pyenv virtualenv 3.11.1 py3.11.1  ==> local 사용자에게 만들어짐
       $ pyenv local py3.11.1 혹은 pyenv activate py3.11.1
    
    2) poetry 로 프로젝트 생성 --> 디렉토리도 자동생성된다.
       $ poetry new poetry-prj1
       $ cd poetry-prj1
       $ poetry shell
       $ poetry add pandas, fastapi, hypercorn, aiohttp   < -D 옵션을 추가하면 개발환경에서만 사용될 패키지를 설치한다 >
       $ poetry show --tree
       $ poetry show --tree --no-dev
       $ poetry remove fastapi
    
    3) poetry package install & update
       $ poetry install
       $ poetry update
    
    4) visual studio code에서 편집하기
       $ code .
       - vscode 에서도 프로젝트 폴더에 가상환경을 선택해서 만들 수 있다. https://code.visualstudio.com/docs/python/environments
    
    5) 실행하기
       $ hypercorn myapp:app --bind 0.0.0.0:8080  <fastapi 기준>
    
    6) zshrc에 alias 추가
       $ vi ~/.zshrc
         alias chpy='pyenv activate py3.11.1'  입력하고 저장 후 vi 종료
       $ source ~/.zshrc
    
    

2.1.7 node, npm, yarn, pip

  • $ brew install node  : node, npm 설치될 것임.
    $ brew install npm
    $ brew install yarn
    $ python -m pip install --upgrade pip
    

2.1.8 aws cli 및 configure for all users

  • $ mkdir -p ~/devtools/aws
    $ cd ~/devtools/aws
    $ curl "https://awscli.amazonaws.com/AWSCLIV2.pkg" -o "AWSCLIV2.pkg" 
    $ sudo installer -pkg AWSCLIV2.pkg -target /
    ... install AWSCLIV3.pkg ...
    $ aws configure
    > AWS Access Key ID [None]: AKIA5ZEG4ZROZ7XPEBXA
    > AWS Secret Access Key [None]: KEY(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)  [ 잘 생각 해보셔 ]
    > Default region name [None]: ap-northeast-2
    > Default output format [None]: json
    

2.1.9 subversion & git

  • Subversion <SVN>
    $ brew search subversion
    $ brew install subversion
    $ brew install upgrade subversion  ==> 설치된 것 업그레이드
    

2.1.10 docker <보완 필요>

  • docker 설치

2.1.40 기타 S/W

2.1.99 마무리

  • $ brew doctor
    $ brew update
    $ brew upgrade
    $ brew topgrade  : 최신버전으로 변경
    

2.2 머신러닝 소프트웨어 설치<feat. pyenv>

  • jupyter lab, notebook

3. 접속 방법

  • Terminal via SSH
  • Remote Desktop
  • Jupyter Notebook

9. 참고자료


2탄에서는 실제 Jupyter를 웹으로 제공하기 위한 방법을 기록해보고자 한다.

라벨: , ,