HyperAI초신경

초보자부터 전문가까지 TVM | TVM 설치(2부)

2년 전
정보
Jiaxin Sun
特色图像

내용을 한눈에 보기:TVM을 설치하는 방법에는 소스 코드에서 설치, Docker 이미지를 사용하여 설치, NNPACK Contrib을 사용하여 설치하는 세 가지가 있습니다. 이 문서에서는 Docker 이미지와 NNPACK Contrib을 통해 설치하는 방법을 설명합니다.

키워드:TVM Docker 기본 튜토리얼   

본 기사는 WeChat 공식 계정 HyperAI에 처음 게시되었습니다.

TVM 문서 101에 오신 것을 환영합니다. 이 시리즈에서는 TVM에 대한 일일 교육을 계속합니다.

이전 호 1부  소스 코드를 통해 TVM을 설치하는 방법을 소개해 드렸습니다. 이 글에서는 TVM을 배우기 전 준비에 대해 계속 다루겠습니다.Docker 이미지와 NNPACK Contrib을 통해 TVM을 설치하는 방법을 설명합니다.

 TVM 설치 Docker 이미지 설치

개발자는 Docker 도구 스크립트를 사용하여 개발 환경을 구축할 수 있습니다. 이는 TVM 데모와 튜토리얼을 실행하는 데에도 도움이 됩니다.

Docker가 필요합니다

https://docs.docker.com/engine/installation

CUDA를 사용하는 경우 nvidia-docker가 필요합니다.

https://github.com/NVIDIA/nvidia-docker

TVM 소스 배포판을 가져오거나 GitHub 저장소를 복제하여 도우미 스크립트를 가져오세요.

git clone --recursive https://github.com/apache/tvm tvm

다음 명령을 사용하여 Docker 이미지를 시작합니다.

/path/to/tvm/docker/bash.sh <image-name>

로컬 빌드가 완료된 후 여기의 이미지 이름은 로컬 Docker 이미지 이름이 될 수 있습니다. 예:tvm.ci_cpu  .

이 도우미 스크립트를 사용하면 다음을 수행할 수 있습니다.

  •   현재 디렉토리를 /workspace에 마운트합니다.
  •   사용자를 bash.sh를 호출하는 사용자로 전환합니다(그러면 호스트 시스템에서 읽고 쓸 수 있습니다)
  •   Linux에서 호스트의 네트워크를 사용합니다. 호스트 네트워크 드라이브가 지원되지 않으므로 macOS에서는 브리지 네트워킹을 사용하고 포트 8888을 노출하여 Jupyter Notebook을 사용합니다.

다음을 입력하여 Jupyter Notebook을 시작하세요.

jupyter notebook

macOS에서 Jupyter Notebook을 실행할 때 오류가 표시되는 경우 OSError: [Errno 99] 요청된 주소를 할당할 수 없습니다.다음을 통해 바인딩된 IP 주소를 변경할 수 있습니다.

jupyter notebook --ip=0.0.0.0

macOS에서는 브리지 네트워킹을 사용하고 있으므로 Jupyter Notebook이 다음과 유사한 창에 보고됩니다. http://{컨테이너_호스트이름}:8888/?토큰=…  .의 URL에서 실행됩니다. 브라우저에 붙여넣을 때는 다음이 필요합니다. 컨테이너 호스트 이름  로 교체 로컬호스트 .

Docker 소스 코드 

Docker 소스 코드 보기: 나만의 Docker 이미지를 만들어 보세요.

https://github.com/apache/tvm/tree/main/docker

다음 명령을 실행하여 Docker 이미지를 빌드합니다.

/path/to/tvm/docker/build.sh <image-name>

비공식적인 타사 사전 구축 이미지를 사용할 수도 있습니다. 참고: 이 이미지는 테스트용이며 ASF 버전이 아닙니다.

https://hub.docker.com/r/tlcpack

TVM 설치: NNPACK Contrib 설치 

NNPACK은 x86-64, ARMv7 또는 ARM64 아키텍처의 CPU에서 실행할 수 있는 신경망 계산을 위한 가속 패키지입니다.NNPACK을 사용하면 MXNet과 같은 고급 라이브러리가 노트북과 모바일 기기를 포함한 멀티 코어 CPU 컴퓨터에서 실행 속도를 높일 수 있습니다.

TVM은 이미 기본적으로 스케줄링을 조정하고 있으므로 NNPACK은 주로 참조 및 비교에 사용됩니다. 일반적인 용도로는 기본적으로 조정된 TVM 구현이 더 좋습니다.

TVM은 합성곱, 최대 풀링, 완전 연결 계층(추론 전용)에서 전방 전파를 위해 NNPACK을 지원합니다.이 문서에서는 NNPACK을 TVM과 함께 사용하는 방법에 대한 개요를 제공합니다.

상태 

NNPACK의 기본 구현에서는 fft와 winograd를 포함한 다양한 가속 방법을 사용합니다.이러한 알고리즘은 다른 알고리즘보다 특정한 배치 크기, 커널 크기 및 스트라이드 설정에서 더 잘 작동하므로 NNPACK은 컨텍스트에 따라 모든 합성곱, 최대 풀링 또는 완전 연결 계층을 지원하지 않을 수 있습니다.

NNPACK은 현재 Linux와 OS X에서만 지원되며 Windows에서는 지원되지 않습니다.

NNPACK 빌드/설치 

훈련된 모델이 NNPACK을 사용하기 위한 몇 가지 조건을 충족하는 경우 NNPACK을 지원하는 TVM을 빌드할 수 있습니다.

다음의 간단한 단계를 따르세요. 다음 명령을 사용하여 NNPACK 공유 라이브러리를 빌드합니다. TVM은 NNPACK을 동적으로 연결합니다.

참고: 다음 NNPACK 설치 지침은 Ubuntu 16.04에서 테스트되었습니다.

닌자 빌딩 

NNPACK을 사용하려면 최신 버전의 Ninja가 필요합니다. 그러니 소스에서 닌자를 설치해야 합니다.

git clone git://github.com/ninja-build/ninja.git
cd ninja
./configure.py --bootstrap

bash가 ninja 실행 파일을 찾을 위치를 알려주려면 환경 변수 PATH를 설정합니다. 예를 들어, 홈 디렉토리 ~에 ninja를 복제했다고 가정해 보겠습니다. 그런 다음 ~/.bashrc에 다음 줄을 추가할 수 있습니다.

export PATH="${PATH}:~/ninja"

NNPACK 빌딩 

CMAKE NNPACK의 새로운 버전은 Peach 및 기타 종속성을 별도로 다운로드합니다.

https://github.com/Maratyszcza/PeachPy

참고: 최소한 OS X에서는 아래의 ninja install을 실행하면 /usr/local/lib에 설치된 googletest 라이브러리가 덮어쓰여집니다. nnpack 사본을 대체하기 위해 googletest를 다시 빌드하는 경우 cmake에 -DBUILD_SHARED_LIBS=ON을 전달해야 합니다.

git clone --recursive https://github.com/Maratyszcza/NNPACK.git
cd NNPACK

# 在 CFLAG 和 CXXFLAG 中添加 PIC 选项以构建 NNPACK 共享库
sed -i "s|gnu99|gnu99 -fPIC|g" CMakeLists.txt
sed -i "s|gnu++11|gnu++11 -fPIC|g" CMakeLists.txt
mkdir build
cd build

# 生成 ninja 构建规则并在配置中添加共享库
cmake -G Ninja -D BUILD_SHARED_LIBS=ON ..
ninja
sudo ninja install

# 在你的 ldconfig 中添加 NNPACK 的 lib 文件夹
echo "/usr/local/lib" > /etc/ld.so.conf.d/nnpack.conf
sudo ldconfig

NNPACK 지원을 통한 TVM 구축

git clone --recursive https://github.com/apache/tvm tvm

* 존재하다 config.cmake  중간 설정 (USE_NNPACK ON) 설정  .

* 할 것이다 NNPACK_PATH  로 설정 $(NNPACK 설치 경로)  구성 후 make를 사용하여 TVM을 빌드합니다.

make

원본 문서를 보려면 tvm.hyper.ai에 로그인하세요. Hyper AI는 앞으로도 중국어 TVM 튜토리얼을 지속적으로 업데이트할 예정이니 기대해주세요~

-- 위에--