Poplar Tutorial 2: POPLIBS 사용

Sungho Kim·2023년 11월 3일

IPU Programming

목록 보기
3/7

2.2. Poplar tutorial 2: POPLIBS

이 튜토리얼을 보완하려면 Poplar 및 PopLibs 사용자 가이드를 읽어보세요. 소스코드는 여기에 있습니다.

설정

IPU에서 이 튜토리얼을 실행하려면 Poplar SDK 환경을 활성화해야 합니다 (IPU 시스템 시작 안내서 참조).
또한 C++11 표준과 호환되는 C++ toolchain이 필요합니다. 이 튜토리얼의 빌드 명령은 GCC를 사용합니다.

PopLibs 사용

tut2_operations/start_here 작업 디렉터리로 사용하여 tut2.cpp 를 편집기에서 엽니다. 이 파일에는 튜토리얼 1에서 본 것과 유사한 기본 Popar 프로그램 구조가 포함되어 있습니다. 몇 가지 변수가 포함된 Graph를 생성하고 초기화합니다. 그러나 이번에는 popops 라이브러리의 일부 추가 헤더가 포함됩니다.

#include <popops/codelets.hpp>
#include <popops/ElementWise.hpp>

이를 통해 IPU device에 고도로 최적화된 데이터 조작을 위한 라이브러리 함수에 액세스할 수 있습니다.

  • device-side 라이브러리 코드를 Graph에 추가하여, 코드가 실행될 때 load되도록 하세요.
popops::addCodelets(graph);

addCodelets 와 같은 호출이 PopLibs 라이브러리가 프로그램에서 사용될 때 필요합니다.

  • 코드를 컴파일하고 실행하세요(popopspoputil 라이브러리를 링크하세요).
g++ --std=c++11 tut2.cpp -lpoplar -lpopops -lpoputil -o tut2
./tut2

코드는 현재 아무 작업도 수행하지 않으므로 Graph에 작업을 추가해 보겠습니다.

  • 추가 작업을 통해 프로그램 sequence를 확장하려면 engine 생성 전에 다음을 추가하세요.
// Extend program with elementwise add (this will add to the sequence)
Tensor v3 = popops::add(graph, v1, v2, prog, "Add");

prog.add(PrintTensor("v3", v3));

popops::add 함수는 elements 단위의 add를 수행하기 위해 프로그램 sequence를 확장합니다. 또한 반환된 결과에 대한 graph에 새 변수 v3 를 만들었습니다. 따라서 add operation 후에, v1에 v2의 합한 결과를 v3가 보유합니다.

  • 프로그램을 다시 컴파일하고 다시 실행하십시오. 합계 결과를 보게 됩니다.
v3: [
  [5.0000000 4.5000000]
  [4.0000000 3.5000000]
]
  • 텐서 v3에 v2를 합하는 코드를 추가하여 결과를 출력하세요.

이것이 PopLibs 라이브러리 함수를 사용하는 데 필요한 전부입니다. PopLibs API 문서나 include 헤더 파일을 검색하여 PopLibs 라이브러리의 기능을 확인할 수 있습니다.

데이터 재구성 및 전치

작업을 수행하기 위해 라이브러리를 호출할 때 데이터가 operation에 전달되는 방식을 조정하는 방법은 다양합니다. 이는 Tensor.hpp 헤더 파일에 있으며 Poplar API Reference 에 문서화되어 있습니다 .

tutorial 1에서, slicing을 사용했습니다. 데이터를 reshaping하고 tranposing하는 함수도 있다.

  • 2x2 v2 matrix의 Transpose에 v1을 합하는 코드를 추가하세요.
// Example element wise addition using a transposed view of the data
Tensor v5 = popops::add(graph, v1, v2.transpose(), prog, "Add");
prog.add(PrintTensor("v5", v5));
  • 프로그램을 다시 컴파일하고 다시 실행하여 결과를 확인하세요.
profile
오복, 무심

0개의 댓글