/ AI

Tenstorrent Metalium 잘 돌아가게 하기

요즘 연구실에서 Tenstorrent라는 회사의 AI가속기를 사용해서 하는 연구를 주로 하고 있는데, 코드베이스가 깔끔하지 않아서 빌드 단계에서 실패하는 경우가 잦다. ㅠ_ㅠ 공식 문서에 작성되어 있는 것 이외에, 자주 발생하는 문제의 해결 방법을 정리해 보았다.

빌드

tt-metal의 `main` 브랜치는 일반적인 프로젝트의 nightly, 혹은 canary 브랜치마냥 하루에도 수십 번씩 커밋이 올라오는 곳이라 소스코드 자체의 문제로 빌드가 안 되는 경우도 꽤 있다. 그런 경우는 제외하고, 빌드할 때 지켜야 하는 원칙 위주로 정리해 보았다. 아래 써있는 것만 지키면 대부분의 문제는 피해갈 수 있다.

Python 가상 환경 만들기

tt-metal 리포지토리를 clone 했다면, create_venv.sh 라는 파일이 있는데 이걸로 tt-metal 맞춤형 venv를 만들어 준다. 주의할 점은 tt-installer로 만들었던 ~/.tenstorrent-venv 랑은 별개라는 것이다. 이걸 그대로 사용하면 대부분 빌드나 실행이 잘 안 될 것이다. 이때 파이썬 버전에 신경써야한다. Tenstorrent에서 공식적으로 지원하고 권장하는 버전은 3.10이다. 다른 버전으로 가상환경을 만들면 안 된다! 이 조건을 만족한 상태로 가상 환경을 만들려면 크게 두 가지 선택지가 있다.

  1. ~/.tenstorrent-venv 를 활성화한 상황에서 create_venv.sh 실행: ~/.tenstorrent-venv 기반으로 새로운 가상환경이 만들어진다. 자연스럽게 Tenstorrent에 대응하는 의존성이 갖춰져서 잘 작동할 것이고 Tenstorrent 개발자들도 이 상황을 의도한 것 같다. 하지만 ~/.tenstorrent-venv 에 의존해서 만들어지는 환경이기 때문에 해당 폴더를 삭제하면 안 된다.

  2. Python 3.10 버전을 새로 설치해서 create_venv.sh 실행: 의존 관계가 복잡해지는 것을 피하고 더 깔끔하게 환경을 조성할 수가 있다.

두 가지 선택지 중 하나를 택했다면 스크립트가 알아서 pip 패키지들까지 설치를 마쳐줄 것이다.

tt-metal 빌드

먼저 공식 문서에서는 마치 tt-metal을 굳이 빌드하지 않아도, pip install ttnn만 하면 자유롭게 ttnn 기반 코드를 실행할 수 있다는 것처럼 나와 있다. 그러나 tt-metal 의 빌드는 선택이 아니라 필수다. 빌드를 하지 않는다면 ttnn._ttnn 모듈을 찾을 수 없다는 오류로 대부분의 파이썬 스크립트를 실행할 수 없을 것이다.

먼저 install_dependencies.sh 를 실행 후, build.sh 를 실행해 준다. 그리고 빌드 에러가 뜨지 않기를 기도하면 된다.

실행 환경

먼저 파이썬이 tt-metal 내부 모듈을 잘 찾을 수 있도록, 모든 파이썬 스크립트는 프로젝트 루트 디렉토리 (tt-metal) 에서 실행해야 한다. 그리고 다음 명령어를 실행해서 환경 변수도 설정해 줘야 한다.

export PYTHONPATH=$(pwd)
pip install -r tt_metal/python_env/requirements-dev.txt
sudo apt-get install cpufrequtils
sudo cpupower frequency-set -g performance

패키지 설치는 한 번만 하면 되고(당연히 앞에서 만든 가상 환경을 활성화한 상태여야 한다.), 배시 프로필 (~/.bashrc 등)에 다음 줄을 추가해주면 환경 변수 문제 역시 매번 신경쓰지 않아도 될 것이다.

export PYTHONPATH=<tt-metal path>
sudo cpupower frequency-set -g performance

근데 cpupower는 없는 명령어라고 나온다…

물론 성능을 조금이라도 더 좋게 만들기 위해 CPU 클럭을 올리는 것일 뿐이니 해당 명령어를 실행하지 않아도 tt-metal은 잘 작동한다.