본문 바로가기
728x90
반응형

전체 글 보기164

10.Thread 프로세스 간에는 각 프로세스의 데이터 접근이 불가한데 스레드는 하나의 프로세스에 여러개를 생성하여 프로세스의 데이터에 모두 접근할 수 있다. Multi Tasking VS Multi Processing VS Multi Thread 멀티 태스킹 : 하나의 cpu, 여러개 process 멀티 프로세싱 : 여러 cpu, 여러개 process : 하나의 process를 여러 cpu에서 실행하는 방법 ? Thread를 여러개 만들어서 해결 가능- 최근 cpu가 멀티 코어를 가지고 있음 멀티스레드 Thread 장점 사용자에 대한 응답성 향상 자원 공유 효율 코드 간결성 Thread 단점 스레드 중 한 스레드만 문제가 생겨도 전체 프로세스가 영향을 받음 스레드를 많이 생성하면 context switching이 많이 .. 2021. 12. 14.
[PytorchToC++] 03. Visual Studio에 LibTorch 설치하기 1. libtorch download - OS와 CUDA를 컴퓨터 환경에 맞게 설정하고 debug, release 버전 둘 다 다운로드한다. 절대 경로로 참조할 예정이므로 폴더 위치를 신중하게 선택! 2. Visual Studio에서 C++, Windows 선택 후 빈 프로젝트를 생성한다. 다운로드 받은 라이브러리 사용을 위해 속성 페이지에서 추가 포함 디렉터리를 설정해주어야한다. 프로젝트 -> 속성 구성 tab에서 Debug, Release 를 변경하며 동일하게 진행하되, debug와 release버전의 폴더는 다르게 설정한다. C/C++ - 일반 - 추가 포함 디렉터리에서 libtorch(debug/release) 라이브러리가 포함된 경로를 추가한다. C/C++ - 언어 - 준수모드 를 아니요로 변경.. 2021. 9. 29.
[PytorchToC++] 02. TorchScript 분석 torch_tracing과 torchscript 비교 에 이어진다. 1. TorchScript 분석 Module을 아래와 같이 구성하면 재사용성과 가독성이 높아진다. MyDecisionGate는 제어 흐름을 활용한다. 아래에 출력되는 grad_fn은 잠재적으로 복잡한 프로그램을 통해 미분을 계산할 수 있게된다. 코드 중 미분값을 명시적으로 정의할 필요가 없는 경우도 있는데 pytorch는 변화도 테이프를 사용하여 연산이 발생할 때만 이를 기록하고 미분값을 계산할 때 거꾸로 재생한다. (많은 프레임워크들이 프로그램 코드로부터 기호식 미분을 계산하는 접근법을 취하고 있음) 1 ) 모듈 1 : torch.nn.Module 을 상속받음 import torch class MyDecisionGate(torch.nn.. 2021. 9. 29.
[PytorchToC++] 01. TorchScript 비교 및 simple code review > Python에서 Pytorch로 작성한 모델을 C++ 환경에서 사용하기 위해 Develop을 진행한다. Python에서 jit로 모델을 작성한 후 C++에서 LibTorch를 사용하여 로드하고자 한다. 1. python 환경 python 환경에서 jit로 모델을 모듈화하는 과정은 두 가지 방법이 있다. [ torch_tracing ] : 입력값을 사용하여 모델 구조를 파악한 뒤 입력값의 모델 안에서의 흐름을 통해 모델을 기록한다. flow가 기록되기 때문에 statically fix된 그래프이다. [ annotation(script) ] : torchscript 컴파일러가 직접 모델 코드를 분석하여 컴파일을 진행한다. 따라서 dynamic한 control flow(조건 분기, break 등)를 사용할.. 2021. 9. 28.
cuda Graphic Card : RTX 3090 1. Graphic card version 확인 1 ) windows + R 실행 => devmgmt.msc 실행 2 ) 기존에 설치되어있었던 버전 전부 삭제 3 ) NVDIA DRIVER 설치 https://www.nvidia.co.kr/Download/index.aspx?lang=kr NVIDIA 드라이버 다운로드 www.nvidia.co.kr 사용자 설정 이런거 나오는데 그냥 다 ok 하고 넘어갑니다. 다 설치 후에는 컴퓨터를 재시작해야합니다! 4 ) CUDA 11.1 설치 https://developer.nvidia.com/cuda-11.1.1-download-archive?target_os=Windows&target_arch=x86_64&target_v.. 2021. 8. 2.
jupyter notebook 꿀팁! 1. 테마 변경 pip install jupyterthemes # 설치 jt -l # 가능한 테마 리스트 jt -t # 설치 chesterish, grade3, gruvboxd, gruvboxl, gruvboxd, monokai, oceans16, onedork, solarizedd, solarized1 2. jupyter 확장 tabs pip install jupyter_contrib_nbextensions && jupyter contrib nbextension install --user nbextensions config를 클릭하면 아래와 같은 확장 가능 tab들을 볼 수 있다. 여기에서 몇 가지 유용하게 사용하는 것만 체크해준다. hinterland : intelligence와 같은 것 Table .. 2021. 8. 1.
09. 프로세스와 IPC 여러 프로세스를 만들어서 동시 실행을 위하여 프로세스간 통신이 필요하다. 하지만 프로세스들이 서로의 공간을 쉽게 접근하면 데이터/코드가 변경될 수 있으므로 굉장히 위험하다. 그래서 프로세스간 통신을 위한 기법이 나오게된다. ex ) 웹서버 ex ) 리눅스 : 리눅스의 프로세스간 공간은 완전히 분리되어 있다. 사용자 공간은 절대 접근할 수 없지만 커널 공간은 공유한다. 프로세스간 통신을 위한 특별한 기법이 필요한데 이때 IPC기법 등의 기법이 필요하다. 1. IPC ? = InterProcess Communication 1 ) Pipe : 단방향 통신, fork()로 자식 프로세스를 만들었을 때 부모와 자식간의 통신을 한다 fork() 라는 시스템콜은 호출하면 현재 프로세스(부모)를 똑같이 복사한 새로운(.. 2021. 8. 1.
08. 프로세스와 Context Switching 1. PCB(Process Control/Context Blocck) 에 저장 - PCB : 프로세스가 실행중인 상태를 캡쳐/구조화해서 저장한다. - 아래의 정보를 갖고 있다. Process ID Register 값(PC, SP) Scheduling Info(Process State) : 프로세스가 현재 ready, block, running 상태인지에 대한 정보 Memory Info(메모리 사이즈 limit) 2. Context Switching - Context Switching : CPU에 실행할 프로세스를 교체하는 기술 1 ) 실행 중지할 프로세스 정보를 해당 프로세스의 PCB에 업데이트해서 메인 메모리에 저장 2 ) 다음 실행할 프로세스 정보를 메인 메모리에 있는 해당 PCB정보를 CPU에 넣고.. 2021. 8. 1.
07. 프로세스 구조 1. 프로세스의 구조를 python, C 의 예로 살펴보자. : 프로세스는 STACK, HEAP, DATA, CODE 네 가지 영역으로 구성된다. 우리가 프로그램에서 작성하는 코드는 PROCESS의 CODE영역에 binary 형식으로 mapping된다. DATA 영역에는 선언한 변수가 정적으로 mapping 되고, Stack에는 실행 순서대로 변수,값을 저장했다가 사용이 끝나면 삭제된다. 2. 프로세스의 구성 1 ) text (code) : 코드 2 ) data : 변수 / 초기화된 데이터 - BSS : 초기값이 없는 전역변수 ( int data; ) - DATA : 초기값이 있는 전역변수 ( int data=1; ) 3 ) stack : 임시 데이터(함수 호출, 로컬 변수) 4 ) heap : 코드에서.. 2021. 7. 31.
06. 인터럽트 1. 인터럽트란 ? CPU가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요할 경우에 CPU에 알려서 처리하는 기술 1 ) Timer Interrupt : 선점형 스케쥴러를 따를 때, 프로세스 running 중에 스케쥴러가 이를 중단시키고, 다른 프로세스로 교체하기 위해 현재 프로세스 실행을 중단시킨다. 그러기 위해서는 스케쥴러 코드가 실행이 되어서 현 프로세스 실행을 중지시켜야 한다. 2 ) IO Device와의 커뮤니케이션 중 저장 매체에서 데이터 처리 완료시, 프로세스를 깨워야한다. ( block state -> ready state ) 3 ) 1 / 0 을 계산할 때 예외상황을 프로세스 등에 알려주어야함 #include int main() { print(.. 2021. 7. 31.
728x90
반응형