1. torch.cat() torch.cat() 기능 정의는 다음과 같다. Concatenates the given sequence of seq tensors in the given dimension. All tensors must either have the same shape (except in the concatenating dimension) 기준 차원에 대해 두 텐서의 요소를 연결하며(list의 extend), 기준 차원을 제외한 shape은 동일해야 한다. import torch t1 = torch.rand((6, 32)) t2 = torch.rand((4, 32)) torch.cat((t1, t2), dim=0).shape >>>> torch.Size([10, 32]) torch.cat((t..
hugginface의 transformers 라이브러리로 만든 커스텀 모델을 onnx로 변환하고 서빙하는 과정을 정리하고자 한다. PyTorch, ONNX Runtime 튜토리얼을 참고하였으며 실제 사용 시 참고해야될 부분들을 적어두고자 한다. 0. ONNX ONNX는 프레임워크에 종속되었던 AI, machine learning 모델들을 하나의 형식으로 통합하기 위한 오픈소스 프로젝트이다. Pytorch, Keras, TensorFlow등을 사용해 생성된 모델(연산자, parameter 집합)을 ONNX로 변환하기 위한 튜토리얼은 여기에 잘 정리되어 있다. 참고로 ONNX는 파일 포맷을 의미한다고 생각하면 되며, ONNX로 변환된 모델을 ONNX Runtime 등의 프레임워크를 통해 CPU, GPU 및 ..
torch.reshape()에 대해 궁금했던 부분들을 정리하고자 한다. Emil Bogomolov의 글을 참고하였다. 1. n-차원 텐서는 메모리 공간에서 어떻게 존재하는가?(Contiguous) 다수의 데이터에 접근할 때 데이터가 가까운 메모리 공간에 모여있으면 읽는 효율이 좋아진다. 때문에 배열 데이터도 연속된 공간안에 위치시키는게 좋다. 다차원 공간에서 배열 데이터를 저장하는 방법은 크게 row-major order와 column-major order가 있다(위키). C계열 언어는 row-major order를 따르며 이는 같은 행(row)에 데이터들이 연속된 메모리 공간에 위치해있는 것을 의미한다. PyTorch도 row-major order로 다차원 데이터를 저장하는데 이를 contiguous라..
Docker Container와 Flask를 활용하여 간단한 딥러닝 모델 추론 API 서버를 만들고자 한다. 추론서버 환경은 ubuntu를 적극 권장하며, 본 포스트에서 주요하게 다루고자 하는 부분은 다음 두 가지이다. 추론 API 서버 띄우기(Docker + Flask) request 라이브러리를 사용한 파일 전송 0. 간단한 Flask tutorial 가장 minimal한 Falsk application은 아래와 같으며, 해당 코드를 flask_test.py로 저장하자. from flask import Flask app = Flask(__name__) @app.route('/hello') def hello(): return 'Hello World!' Flask 공식문서에 따르면 위 코드에 대한 설명은..
nn.Linear()등으로 정의한 파라미터 접근은 parameters(), named_parameterss()으로 가능하다. 정확히는 layer가 모두 nn.Module()을 상속받으므로 Module에 정의되어 있는 parameter 접근 방법을 사용하면 된다. 1. torch.nn.Module.parameters() parameters()는 layer 이름을 제외한 parameter값에 대한 iterator를 준다. layer = torch.nn.Linear(10,3) layer >> Linear(in_features=10, out_features=3, bias=True) for p in layer.parameters(): print(p) >> Parameter containing: tensor([[-..
PyCharm은 디버깅 세션을 통해 각 변수를 추적할 수 있는 기능을 제공합니다. 더 이상 매번 print문 찍으면서 에러 트래킹 할 필요가 없어요. 한가지 단점은 iterative에서의 트래킹은 어렵다는 부분입니다. 하지만 한 instance가 담고 있는 모든 변수, tensor 모양 등을 추적하기엔 굉장히 편리합니다. PyCharm에서 어떻게 디버깅 세션을 실행시킬 수 있는지 정리해보도록 하겠습니다. 1. 실행파일에 디버깅 argument 추가 디버깅 세션을 사용하기 위해서는 argparse 모듈을 통해 디버깅 실험세팅을 해두는게 좋습니다 import argparse parser = argparse.ArgumentParser() parser.add_argument('--debug', action='s..
딥러닝 서버 구축 및 PyCharm에서의 개발환경 세팅을 위해 거쳤던 과정들을 정리하고자 한다. 목차는 다음과 같다 1. Docker 기반의 딥러닝 환경 구축 2. PyCharm에서 서버 환경 접속 및 세팅 1번 글대로 환경을 구축하고 있었다면 다음과 같이 2개의 terminal이 띄워져있을 것입니다. ① Container를 실행시킨 terminal (서버) ② 실행중인 Container에 접속한 terminal (클라이언트) ②를 실행하는 유저 머신에서 PyCharm 개발환경 세팅하는 부분을 설명드리겠습니다. 2. PyCharm에서의 서버 환경 접속 및 세팅 (1) PyCharm 개발 환경 세팅 PyCharm은 VSCode 처럼 서버 환경에 직접 접속하는 것이 아니라 로컬 개발환경에 폴더를 따로 만들어..
딥러닝 실험환경을 구축하고 관리하기 가장 쉬운 방법을 정리하고자 합니다. 1. Docker 기반의 딥러닝 환경 구축 2. PyCharm에서 서버 환경 접속 및 세팅 1. Docker를 활용한 딥러닝 환경 구축 서버 환경은 다음과 같다(ubuntu 사용할 것을 적극 권장합니다) ubuntu 18.04 docker 19.03.5 ubuntu에서 terminal을 띄워서 아래 과정을 거칩니다. (1) Docker 설치 curl -s https://get.docker.com | sudo sh # 공식 도커 설치 스크립트 docker -v # Docker 버전 확인 먼저 Docker를 설치해줍니다. Docker 기반으로 돌아가는 Container는 Ubuntu에서 안정적으로 실행되고 윈도우보다 세팅이 훨씬 쉽습니..