Developers 공간 [Basic](26)
-
[Python] Multi-process와 Multi-thread 구현하기
프로젝트를 구성할 때 다양한 프레임워크를 활용해서 구현하시는 경우, 하나의 프로세스를 통해 실행하는 경우가 많습니다. 하지만 이번 글에서는 Python으로 여러개의 프로세스(Process)와 쓰레드(Thread)를 통해 프로젝트를 효율적으로 구성하고 싶은 경우에 대해 정리해 보고자 합니다. 1. Concept a. Process & Thread b. Multi-Process c. Multi-Thread 2. Inter-Process Communication a. Message Queue b. Shared Memory c. Memory Map d. Socket 3. Synchronization a. Mutex b. Semaphore c. Conditional Variable 4. Example a. Ser..
2024.01.21 -
[Server] grpc stream 서버 및 webRTC 서버 구축하기
어플리케이션을 설계하다보면 Client간의 P2P(Peer To Peer) 연결이 필요할 수도있고, 서버와의 streaming 연결이 필요할 수도 있는 등 다양한 Communication이 필요합니다. 이럴때 최근 많이 사용되는 Communication Protocol에는 HTTP, WebSocket, gRPC, WebRTC 등이 있고, 이중에 gRPC와 WebRTC를 위한 서버를 이번 글에서 구축해보고자 합니다. 개념을 먼저 살펴 본 뒤에, 직접 gRPC를 활용한 streaming서버를 구축해보고, WebRTC를 활용하기 위한 서버를 직접 구현해보고자 합니다.1. 개념정리 a. gRPC란? b. WebRTC란? 2. gRPC를 활용한 서버 구축 a. 환경 구축 b. exam..
2023.12.30 -
[Nvidia] TensorRT 구현하기 (Python)
TensorRT(TRT)는 Nvidia에서 제공되는 Deep Learning Inference를 위한 SDK입니다. PyTorch, Caffe, Tensorflow 등의 Deep Learning Framework를 활용해 학습된 모델을, 여러 플랫폼에 가장 적합한 Kernel을 선택하며, 각 제품 각 아키텍쳐에 맞는 가속을 자동으로 도와 최적의 GPU 자원을 활용해 Performance를 낼 수 있도록 도와주는 엔진이라고 볼 수 있습니다. ** Kernel : GPU에서 병렬 실행되는 명령의 모음 TensorRT를 이용하지 않고, 직접 CUDA 를 활용해 Custom한 로직으로 최적화할 수도 있으나, Nvidia에서 제공하는 API를 활용하는 것이 작업에 유용하기도 합니다. 이번엔 onnx파일을 활용해 ..
2023.12.08 -
[Pytorch] Attention Layer 분석 및 구축하기
이번엔 다양한 논문 및 네트워크 아키텍처에서 자주 활용되는 Attention Layer를 구축한 사례에 대해서 정리해보고자합니다. 물론 내가 만드는 네트워크의 'task에 따라서', '원하는 input feature의 modal'에 따라서 다양하게 사용할 수 있겠지만, 보통 어떻게 활용되는지 혹은 왜 쓰는지에 대해 파악하고 나면 사용하기 쉬울 것이라는 생각이 듭니다. 해당 코드는 Transformer, DeTR, 3DeTR 세가지 모델을 참조했으며, 각각 코드는 아래에서 참조했습니다.Transformer : https://github.com/hyunwoongko/transformerDeTR : https://github.com/facebookresearch/detr3DeTR : https://github..
2023.06.20 -
[OOP] Design Pattern 정리
기존에 PP(Procedural Programming, 절차 지향 프로그래밍)에서는 일부분의 코드를 고치기 위해 전체를 다시 설계해야하는 단점이 있었습니다. 따라서 유연성과 재사용성을 높이기위해 OOP(Object Oriented Programming, 객체 지향 프로그래밍)가 등장했고, Java, C++, C#과 같은 객체 지향 프로그래밍 언어들의 중요성이 강조되고 있습니다. 먼저 간단히 OOP의 3요소 5원칙에 대해 소개하겠습니다. 먼저, 3요소는 아래와 같습니다. 캡슐화(Encapsulation) : 정보를 은닉하기 위해 속성을 숨기고, 기능을 공개하는 것. 상속(Inheritance) : 부모 클래스를 재사용하고 확장하는 것. 다형성(Polymorphism) : 사용편의를 위해 하나의 객체가 Ov..
2023.05.15 -
[Docker] 컨테이너의 기초와 운영
로컬에서 환경 셋팅을 할때 라이브러리 셋팅 혹은 배포할 때 Provisioning 및 Orchestration을 위해서 다양한 분야에서 docker를 활용합니다. Docker는 "Container"라는 그릇에 필요한 구성 파일, 라이브러리 및 dependency들을 하나의 실행 유닛으로 패키징하여, 환경에 구애받지 않고 실행, 배포 및 확장할 수 있도록 돕는 오픈 소스 소프트웨어 Platform입니다. 최근에는 AWS, Google Cloud 등 다양한 클라우드 기반의 서비스에서 VM대신 Container를 활용해 서비스하기도 하고, 로컬에서 작업할 때도 느려터진 VM보다는 Container기반의 작업환경을 구축하는 분들이 많은 것 같습니다. 이번 챕터에서는 Docker를 살펴보고 다양한 개념에 대해 정..
2023.04.16