TASO는 자동으로 생성되고 검증된 그래프 변환을 사용하여 DNN 모델의 계산 그래프를 최적화합니다. 임의의 DNN 모델의 경우 TASO는 자동 생성된 그래프 변환을 사용하여 원래 DNN 모델과 동일한 잠재적 계산 그래프의 대규모 검색 공간을 구축합니다. TASO는 비용 기반 검색 알고리즘을 사용하여 공간을 탐색하고 고도로 최적화된 계산 그래프를 자동으로 검색합니다. TASO는 기존 딥 러닝 프레임워크의 그래프 최적화 프로그램보다 최대 3배 성능이 뛰어납니다.
소스에서 TASO를 설치하려면 지침을 참조하세요. 또한 모든 종속성이 사전 설치된 사전 빌드된 Docker 이미지도 제공합니다.
TASO는 ONNX, TensorFlow 및 PyTorch 그래프 형식으로 사전 훈련된 DNN 모델을 직접 최적화할 수 있습니다. TASO는 또한 임의의 DNN 아키텍처를 최적화하기 위한 Python 인터페이스를 제공합니다. TASO는 최적화된 계산 그래프를 ONNX로 내보내는 것을 지원하며, 이는 대부분의 기존 딥 러닝 프레임워크에서 입력으로 직접 사용할 수 있습니다.
TASO는 사전 훈련된 ONNX 모델을 직접 최적화할 수 있으며, 이는 단 몇 줄의 Python 코드로 수행할 수 있습니다. 다음 코드 조각은 ONNX에서 사전 훈련된 DNN 모델을 로드하고, 모델을 최적화하고, 최적화된 모델을 ONNX 파일에 저장하는 방법을 보여줍니다.
import taso
import onnx
old_model = taso . load_onnx ( "/path/to/load/onnx/model" )
taso_graph = taso . optimize ( old_model )
new_model = taso . export_onnx ( taso_graph )
onnx . save ( new_model , "/path/to/save/new/onnx/model" )
최적화된 모델은 원본과 동일한 정확도를 가지며 기존 딥러닝 프레임워크에서 직접 사용할 수 있습니다. 일부 원본 및 TASO 최적화 ONNX 파일은 onnx
폴더에서 사용할 수 있습니다.
TASO는 tf2onnx를 사용하여 모델을 ONNX로 변환하여 TensorFlow 모델을 최적화할 수 있습니다.
tf2onnx
다음과 같이 설치하거나 소스에서 설치합니다. pip install -U tf2onnx
tf2onnx
사용하여 TensorFlow 모델을 ONNX로 변환합니다. python -m tf2onnx.convert
--saved-model /path/to/tensorflow/saved/model
--output /path/to/onnx/model/file
PyTorch에는 torch.onnx 패키지의 일부로 ONNX에 대한 지원이 내장되어 있습니다. TASO는 ONNX 형식의 PyTorch 모델을 직접 최적화할 수 있습니다.
TASO는 TASO Python 인터페이스를 사용하여 임의의 DNN 아키텍처를 최적화할 수도 있습니다. 다음 코드 조각은 그림에 표시된 가장 왼쪽의 DNN 그래프를 작성합니다. TASO는 자동으로 일련의 중요한 변환을 수행하고 결국 V100 GPU에서 1.3배 더 빠른 가장 오른쪽의 DNN 그래프를 발견합니다. examples
폴더에서 더 많은 DNN 예제를 사용할 수 있습니다.
import taso
import onnx
#Build DNN model
graph = taso . new_graph ()
input = graph . new_input ( dims = ( 1 , 128 , 56 , 56 ))
w1 = graph . new_weight ( dims = ( 128 , 128 , 3 , 3 ))
w2 = graph . new_weight ( dims = ( 128 , 128 , 1 , 1 ))
w3 = graph . new_weight ( dims = ( 128 , 128 , 3 , 3 ))
left = graph . conv2d ( input = input , weight = w1 , strides = ( 1 , 1 ), padding = "SAME" , activation = "RELU" )
left = graph . conv2d ( input = left , weight = w3 , strides = ( 1 , 1 ), padding = "SAME" )
right = graph . conv2d ( input = input , weight = w2 , strides = ( 1 , 1 ), padding = "SAME" , activation = "RELU" )
output = graph . add ( left , right )
output = graph . relu ( output )
#Optimize DNN model
new_graph = taso . optimize ( graph )
onnx_model = taso . export_onnx ( new_graph )
onnx . save ( onnx_model , "/path/to/save/new/onnx/model" )
Zhihao Jia, Oded Padon, James Thomas, Todd Warszawski, Matei Zaharia 및 Alex Aiken. TASO: 자동 그래프 대체 생성을 통한 딥 러닝 계산 최적화. 운영 체제 원리 심포지엄(SOSP) 간행물, 캐나다 온타리오, 2019년 10월.
Zhihao Jia, James Thomas, Todd Warszawski, Mingyu Gao, Matei Zaharia 및 Alex Aiken. 완화된 그래프 대체를 통해 DNN 계산 최적화. 시스템 및 기계 학습(SysML) 컨퍼런스 간행물, 캘리포니아주 팔로알토, 2019년 4월.