AI 개발
-
✲ 모델 양자화 (Quantization) 모델 양자화(Quantization)은 모델의 가중치(weight)와 활성화 함수(activation function) 출력 값을 낮은 정밀도(precision)으로 변환하여 메모리를 줄이고 연산을 빠르게 하는 기법이다. 모델 가중치 값 등을 실수형(floating-point) 변수에서 정수형(integer or fixed point) 변수로 변환하여 모델의 성능은 보존하되 사이즈를 줄여 모델의 실행과 배포를 효율적으로 하는 것이다. 낮은 정밀도(precision)으로 변환한다는 것은 다음과 같다. 먼저 데이터를 표현하는 부동 소수점(Floating Point)는 정규화를 통해 더 많은 수를 적은 메모리로 표현하기 위한 것이다. 데이터를 "부호 x 가수 x 밑..
모델 양자화 (Quantization) 개념✲ 모델 양자화 (Quantization) 모델 양자화(Quantization)은 모델의 가중치(weight)와 활성화 함수(activation function) 출력 값을 낮은 정밀도(precision)으로 변환하여 메모리를 줄이고 연산을 빠르게 하는 기법이다. 모델 가중치 값 등을 실수형(floating-point) 변수에서 정수형(integer or fixed point) 변수로 변환하여 모델의 성능은 보존하되 사이즈를 줄여 모델의 실행과 배포를 효율적으로 하는 것이다. 낮은 정밀도(precision)으로 변환한다는 것은 다음과 같다. 먼저 데이터를 표현하는 부동 소수점(Floating Point)는 정규화를 통해 더 많은 수를 적은 메모리로 표현하기 위한 것이다. 데이터를 "부호 x 가수 x 밑..
2024.08.01 -
Contiguous Contiguous(인접한, 근접한)는 단어의 뜻처럼 Tensor의 각 값들이 메모리에도 순차적으로 저장되어 있는지 여부를 의미한다. [0, 1, 2, 3, 4]라는 Tensor 가 있을 때, 메모리에 저장된 모양이 이와 같으면 contiguous한 것이고 이런식으로 요소들이 메모리에 연속적으로 저장되어 있지 않으면 contiguous하지 않은 것이다. >>> t = torch.tensor([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]) >>> t.is_contiguous() True >>> t.stride() (4, 1) t라는 Tensor는 처음에는 위와 같이 메모리에 저장되어 있을 것인데, >>> t = t.transpose() >>> t.str..
[Pytorch] pytorch ContiguousContiguous Contiguous(인접한, 근접한)는 단어의 뜻처럼 Tensor의 각 값들이 메모리에도 순차적으로 저장되어 있는지 여부를 의미한다. [0, 1, 2, 3, 4]라는 Tensor 가 있을 때, 메모리에 저장된 모양이 이와 같으면 contiguous한 것이고 이런식으로 요소들이 메모리에 연속적으로 저장되어 있지 않으면 contiguous하지 않은 것이다. >>> t = torch.tensor([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]) >>> t.is_contiguous() True >>> t.stride() (4, 1) t라는 Tensor는 처음에는 위와 같이 메모리에 저장되어 있을 것인데, >>> t = t.transpose() >>> t.str..
2022.08.03 -
원래는 도커도 쓰고 로컬 파이썬도 쓰고 있었는데 최근에 개인 노트북과 회사 노트북의 환경을 모두 초기화하였습니다. 로컬에는 어떤 언어도 프레임워크도 설치하지 않고 도커 컨테이너만 사용하려고 합니다. 확실히 관리하기 정말 편하고 이것저것 변경하기가 너무 편해요. 예를 들어서 Inference를 위한 flask API 용 환경은 최대한 가볍고 심플한 파이썬 컨테이너를 띄워놓고, 딥러닝을 위한 주피터 파이토치 환경을 띄워놓으면, 서로 다른 두 환경을 왔다갔다 하면서 작업하기도 편리하고 콘다 사용시 충돌문제가 없어 너무 좋았습니다. 그리고 docker-compose를 통해서 여러개의 컨테이너를 원하는 옵션으로 한번에 띄울 수 있어서 좋습니다. 예를 들어서 하나의 작업을 할 때 jupyter + pytorch +..
[Docker] 딥러닝과 파이썬 환경구축을 위한 도커파일원래는 도커도 쓰고 로컬 파이썬도 쓰고 있었는데 최근에 개인 노트북과 회사 노트북의 환경을 모두 초기화하였습니다. 로컬에는 어떤 언어도 프레임워크도 설치하지 않고 도커 컨테이너만 사용하려고 합니다. 확실히 관리하기 정말 편하고 이것저것 변경하기가 너무 편해요. 예를 들어서 Inference를 위한 flask API 용 환경은 최대한 가볍고 심플한 파이썬 컨테이너를 띄워놓고, 딥러닝을 위한 주피터 파이토치 환경을 띄워놓으면, 서로 다른 두 환경을 왔다갔다 하면서 작업하기도 편리하고 콘다 사용시 충돌문제가 없어 너무 좋았습니다. 그리고 docker-compose를 통해서 여러개의 컨테이너를 원하는 옵션으로 한번에 띄울 수 있어서 좋습니다. 예를 들어서 하나의 작업을 할 때 jupyter + pytorch +..
2021.12.31 -
데이터의 행렬 연산, 딥러닝, 전처리 등 데이터가 커질 수록 연산량도 많아집니다. 그리고 파이썬은 인터프리터 언어인 특성상 느립니다. numpy를 사용하는 것 만으로도 속도가 올라가지만, 놀고 있는 코어를 모두 사용해 병렬 연산을 하면 더 빨라지지 않을까? 하는 생각을 하게됩니다. 그래서 처음에 python의 내장함수인 multiprocessing을 사용하곤 했는데 이보다 더 편하고 좋은 방법이 있어 포스팅하려고 합니다. # python multiprocessing import numpy as np from multiprocessing import Pool arr = np.random.random(1000000) def mul(x): return x * 10 # list comprehension resu..
[Ray] Multiprocessing library Ray데이터의 행렬 연산, 딥러닝, 전처리 등 데이터가 커질 수록 연산량도 많아집니다. 그리고 파이썬은 인터프리터 언어인 특성상 느립니다. numpy를 사용하는 것 만으로도 속도가 올라가지만, 놀고 있는 코어를 모두 사용해 병렬 연산을 하면 더 빨라지지 않을까? 하는 생각을 하게됩니다. 그래서 처음에 python의 내장함수인 multiprocessing을 사용하곤 했는데 이보다 더 편하고 좋은 방법이 있어 포스팅하려고 합니다. # python multiprocessing import numpy as np from multiprocessing import Pool arr = np.random.random(1000000) def mul(x): return x * 10 # list comprehension resu..
2021.12.20 -
진짜 진짜 좋은 주피터랩 모니터링 익스텐션을 발견해서 오랜만에 포스팅을 해봅니다. 그동안 top이나 htop으로 cpu 점유율이나 메모리 점유율을 모니터링 했었는데요. 터미널을 따로 띄워놓는게 귀찮아서 잘 안하게 되더라구요 ㅠㅠ 그런데 서버를 혼자만 쓰는게 아니라 모니터링은 꼭 해야 한다고 느껴서 뭔가 좋을게 없을까 뒤지다가 노트북 파일 안에서 바로바로 cpu점유율이랑 메모리를 볼 수 있는 짱짱 좋은 익스텐션을 발견하였습니다. 명령어를 쳐서 확인하는 것이 아니라 터미널을 따로 켜놓을 필요 없고 노트북 파일 안에서 상단바(topbar)에 표시되기 때문에 아주아주 편리합니다~.~ 🔗 Inatallation 일단 주피터랩 버전을 확인합니다. jupyter lab --version JupyterLab 3.x 일..
[JupyterLab] CPU&Memory 모니터링 익스텐션 ✨진짜 진짜 좋은 주피터랩 모니터링 익스텐션을 발견해서 오랜만에 포스팅을 해봅니다. 그동안 top이나 htop으로 cpu 점유율이나 메모리 점유율을 모니터링 했었는데요. 터미널을 따로 띄워놓는게 귀찮아서 잘 안하게 되더라구요 ㅠㅠ 그런데 서버를 혼자만 쓰는게 아니라 모니터링은 꼭 해야 한다고 느껴서 뭔가 좋을게 없을까 뒤지다가 노트북 파일 안에서 바로바로 cpu점유율이랑 메모리를 볼 수 있는 짱짱 좋은 익스텐션을 발견하였습니다. 명령어를 쳐서 확인하는 것이 아니라 터미널을 따로 켜놓을 필요 없고 노트북 파일 안에서 상단바(topbar)에 표시되기 때문에 아주아주 편리합니다~.~ 🔗 Inatallation 일단 주피터랩 버전을 확인합니다. jupyter lab --version JupyterLab 3.x 일..
2021.10.28 -
파이썬에서 모듈을 만들어서 import 하다보면 ImportError: attempted relative import with no known parent package 위 에러를 많이 만나게 된다. 패키지 안에서 스크립트 파일(실행 파일)을 실행 시키려고 했을 때 발생하는 에러이다. 일단 이유는 파이썬의 인터프리터가 __main__ 의 위치를 알지 못하기 때문에 위 같은 에러가 발생하는 것이다. 파이썬의 인터프리터는 relative import의 모듈 위치를 정할 때(기준이 되는 위치) __name__ 속성에 의해 결정되고 터미널에서 파이썬을 직접 실행시키면 __name__ == '__main__'이 되기 때문이다. 이 부분이 이해가 잘 안된다면, 먼저 모듈과 패키지의 차이에 대해서 이해해야 한다. 모..
[Python] 모듈 상대경로(ImportError: attempted relative import with no known parent package)파이썬에서 모듈을 만들어서 import 하다보면 ImportError: attempted relative import with no known parent package 위 에러를 많이 만나게 된다. 패키지 안에서 스크립트 파일(실행 파일)을 실행 시키려고 했을 때 발생하는 에러이다. 일단 이유는 파이썬의 인터프리터가 __main__ 의 위치를 알지 못하기 때문에 위 같은 에러가 발생하는 것이다. 파이썬의 인터프리터는 relative import의 모듈 위치를 정할 때(기준이 되는 위치) __name__ 속성에 의해 결정되고 터미널에서 파이썬을 직접 실행시키면 __name__ == '__main__'이 되기 때문이다. 이 부분이 이해가 잘 안된다면, 먼저 모듈과 패키지의 차이에 대해서 이해해야 한다. 모..
2021.10.08 -
파이썬 collections 모듈 collections는 데이터 처리를 위한 유용한 함수를 제공하는데, dict, list, set, tuple 타입의 자료형에서 확장된 기능을 제공하는 built-in module이다. namedtuple() factory function for creating tuple subclasses with named fields deque list-like container with fast appends and pops on either end ChainMap dict-like class for creating a single view of multiple mappings Counter dict subclass for counting hashable objects Order..
[Python] collections & itertools 의 유용한 함수들파이썬 collections 모듈 collections는 데이터 처리를 위한 유용한 함수를 제공하는데, dict, list, set, tuple 타입의 자료형에서 확장된 기능을 제공하는 built-in module이다. namedtuple() factory function for creating tuple subclasses with named fields deque list-like container with fast appends and pops on either end ChainMap dict-like class for creating a single view of multiple mappings Counter dict subclass for counting hashable objects Order..
2021.09.02 -
pandas는 디스크말고 RAM에 데이터를 적재하는데, 이때 Contiguous Memory Allocation(연속 메모리 할당) 방식을 사용한다. 디스크 적재시(Reading from SSDs) : ~16000 nanoseconds 램 적재시(Reading from RAM) : ~100 nanoseconds **Contiguous Memory Allocation(consecutive blocks are assigned) : logical address가 연속적이면 physical address도 연속적으로 배치된다. **NonContiguous Memory Allocation(separate blocks at different locations) 멀티프로세싱과 GPU를 사용하기 전에, pd.read_..
[Pandas] 메모리 줄이기 read_csv, chunk, multiprocessingpandas는 디스크말고 RAM에 데이터를 적재하는데, 이때 Contiguous Memory Allocation(연속 메모리 할당) 방식을 사용한다. 디스크 적재시(Reading from SSDs) : ~16000 nanoseconds 램 적재시(Reading from RAM) : ~100 nanoseconds **Contiguous Memory Allocation(consecutive blocks are assigned) : logical address가 연속적이면 physical address도 연속적으로 배치된다. **NonContiguous Memory Allocation(separate blocks at different locations) 멀티프로세싱과 GPU를 사용하기 전에, pd.read_..
2021.07.01