본문 바로가기

전체 글189

메모리 할당 기법 ptmalloc2 vs tcmalloc vs hoard vs jemalloc 비교 개요 우리가 서드파티 데이터베이스를 다루거나 운영체제 등을 설정할때 메모리를 할당하는 여러가지 기법이 있다. 대표적으로 ptmalloc2, tcmalloc, hoard, jemalloc등 있는데 이 기법에 대해 고찰해보자. 현대 메모리 할당 기법은 크게 차이가 나지 않지만 특정 상황에서는 우수한 성능을 발휘할 수 있다는 점을 인지하자 우선 개념부터 알아보자 PTMalloc2 PTMalloc2는 Doug Lea에 의해 개발된 메모리 할당기의 두 번째 버전이다. PTMalloc2는 기존의 PTMalloc보다 더 효율적인 메모리 할당과 관리를 제공하기 위해 개선되었다. 주로 glibc의 메모리 할당기로 사용되며, C/C++ 언어에서 사용되는 대규모의 동적 메모리 할당과 해제를 효율적으로 처리하는 것이 목표이다.. 2023. 7. 26.
MySQL 파티션을 왜 사용하는가?! 파티션이란? 데이터를 물리적으로 분할하여 쿼리 성능과 데이터 관리 및 유지보수 작업을 용이하게 하기 위해서이다. 데이터베이스 서버의 입장에서는 데이터를 별도의 테이블로 분리해서 저장하지만 사용자 입장에서는 여전히 하나의 테이블로 읽기와 쓰기를 할 수 있게 해주는 효과를 가질 수 있다. 인덱스에 용이 테이블의 크기가 커질수록 인덱스의 크기도 같이 커지기 때문에 읽기/쓰기에 대한 IO에 같이 늘어난다. 이렇게 커짐으로써 인덱스에 처리되는 시간이 늘어나고 인덱스가 물리적인 메모리보다 커지는 경우도 발생한다. 파티션을 분할하면 이런 효과를 가져온다고 말할 수 있다. 파티션을 어떻게 나눌 수 있는가? 우선 방법론에 대해 알아보고 실험을 해보자. RANGE Partitioning (범위 분할) RANGE 분할은 주.. 2023. 7. 19.
Milvus Vector DataBase에서 로그 수준을 동적으로 변경하자 Overview 미들웨어, 데이터 베이스등과 같은 시스템을 운영하다보면 로그 레벨을 동적으로 변경해야되는 때가 많다. 그럴때마다 설정 파일을 변경하면서 시스템을 내렸다 올렸다는 일은 여간 까다롭거나 비용이 많이 드는 일이 아닐 수 없다. 다행히 Milvus에서는 이런 로그 레벨 수준으로 동적으로 변경 가능하도록 API 제공해주고 있다. https://medium.com/vector-database/dynamically-change-log-levels-in-the-milvus-vector-database-252d467e5052 Dynamically Change Log Levels in the Milvus Vector Database The Milvus vector database adopts the zap.. 2023. 7. 12.
동기 (synchronous) vs 비동기 (asynchronous) 동기 (synchronous) 프로그램들이 순차적으로 진행되며, 각 작업은 이전 작업의 완료를 기다리고 실행하는 것을 말한다. 비동기 (asynchronous) 여러 프로그램 작업들이 작업이 실행되는 동안 결과를 기다리지 않고 다음 작업을 수행한 것을 말한다. 예제 1) 아래 처럼 Task 1부터 Task 4까지 각각 대기하지 않고 순차적으로 비동기로 처리할 수 있으며 예제 2) 아래 처럼 Task 1 ~ Task2번까지 실행하고 난 후 대기하지 않고 Task 3 ~ Task 4를 실행할 수도 있다. 비동기 (asynchronous) vs 멀티 스레드 (multi thread) 비동기 프로그래밍 (asynchronous programming)은 여러 작업을 동시에 실행하는 방법론을 말한다. 비동기(asy.. 2023. 7. 11.
Python GIL (Global Interpreter Lock)에 대해 알아보자 저번에 학습한 이론대로라면 Thread 2개를 만들어서 실행하면 아래와 같은 그림으로 동작된다고 생각할 수 밖에 없다. (참조 : https://yscho03.tistory.com/293) 하지만 파이썬은 아래와 같이 동작하지 않는다. 파이썬에는 GIL(Global Interpreter Lock) 이 있기때문에 스레드에서 한 번에 하나의 스레드만 Python 바이트코드를 실행한다. GIL(Global Interpreter Lock) GIL(Global Interpreter Lock)은 CPython 인터프리터(파이썬의 표준 구현체)에서 사용되는 개념이다. GIL은 파이썬 스레드에서 한 번에 하나의 스레드만 Python 바이트코드를 실행하도록 제한하는 메커니즘이다. GIL은 파이썬이 C 언어로 작성된 확장.. 2023. 7. 11.
스레드 풀 (Thread Pool) Thread Per Request 모델 Thread Per Request 모델은 웹 서버에서 요청이 들어올 때마다 새로운 스레드를 생성하여 해당 요청을 처리하는 방식이다. 각 요청은 독립적으로 실행되기 때문에 동시에 여러 요청을 처리할 수 있다. 간단한 구현 각 요청에 대해 새로운 스레드를 생성하기 때문에 구현이 비교적 간단하다. 스레드는 일반적으로 운영체제에서 제공하는 기능을 사용하여 생성 및 관리할 수 있다. 동시성 Thread Per Request 모델은 여러 스레드를 통해 동시에 요청을 처리할 수 있으므로 동시성을 지원한다. 이는 대규모 트래픽을 처리하는 데 유용할 수 있다. 이렇게 계속 요청 들어올때마다 스레드를 생성하게 된다면? 컨텍스트 스위칭 오버헤드 스레드는 자원을 공유하면서 실행되기 때문.. 2023. 7. 11.
멀티 스레드 vs 멀티 프로세스 단일 프로세스 vs 멀티 프로그래밍 vs 멀티 태스킹 단일 프로세스 CPU에 한번에 하나의 프로그램만 실행되는 것을 말한다. 단일 프로세스의 큰 단점은 프로세스→ IO → 프로세스→ IO 이런 순으로 반복이 될때 IO 처리시간시 CPU가 유휴 상태가 되고마는 큰 단점이 있다. 멀티 프로그래밍 위에서 언급한 단일 프로세스를 극복하기 위한 처리 방법으로 나온 것이 멀티 프로그래밍 기법이다. 프로세스가 2개 존재한다고 가정했을때, 각 프로세스들은 CPU 시간을 일정한 시간 단위로 번갈아가며 할당받는다. 이렇게 함으로써, 프로세스들은 동시에 실행되는 것처럼 느껴지지만 실제로는 CPU 시간을 번갈아가며 사용하게 된다. 그러면 예를 들어서 프로세스-1이 시간이 길다면 어떻게 될까? 프로세스-2가 굉장히 많은 시간을.. 2023. 7. 10.
스핀락(Spinlock) vs 뮤텍스(Mutex) vs 세마포어(Semaphore) Overview 데이터의 일관성과 정합성을 유지하기 위하여 동시성 제어를 위해 사용되는 동기화 기법을 알아보고 각각의 차이점을 알아본다. 용어 정리 동기화(Synchronization)란? 여러 개의 스레드 또는 프로세스가 공유된 자원에 접근할 때 발생하는 문제를 해결하기 위해 사용되는 개념이다. 동기화를 통해 스레드 또는 프로세스들 간의 상호 작용을 조절하고, 데이터의 일관성과 정확성을 보장할 수 있다. 임계 영역(Critical Section)이란? 임계 영역은 여러 스레드나 프로세스에서 동시에 접근 가능한 영역을 말한다. 이 임계 영역에 동시에 접근하면 데이터의 일관성을 유지할 수 없거나, 예상치 못한 결과가 발생할 수 있어 임계 영역에 대한 동시 접근을 효율적으로 제어하기 위해 동기화 기법이 사용.. 2023. 7. 7.
MySQL의 VARCHAR(1000) vs TEXT의 차이점은 무엇일까? 왜 VARCHAR(500), VARCHAR(1000) 등 이런식으로 사용하는걸까? TEXT로 데이터형으로 저장하면 되지. 왜 굳이 VARCHAR(500) 이런식으로 사용하는지가 의문일 것이다. 그럼 서두는 제쳐두고 간단하게 설명부터 하도록 하겠다. 제약사항 VARHCAR는 공간적으로 제약이 있다. VARCHAR는 테이블에 하나의 레코드가 저장할 수 있는 최대 길이가 65,535 바이트이다. 그렇다보니 레코드 사이즈 한계에 따라서 최대 저장 길이 설정시 공간을 아껴 쓸 필요가 있다. 하지만 이에 비해 BLOB, TEXT 같은 타입은 제약이 없다. BLOB, TEXT과 같은 LOB (Large Object)는 B-Tree 외부의 Off-Page 페이지에 저장을 한다. LOB 타입의 컬럼을 항상 Off-Pag.. 2023. 7. 7.
Slack Bot 만들기 전체 소스 샘플 소스는 아래 링크에 올려놓았으니 샘플 이용해서 구축하면 된다. GitHub - yscho03/sample_slack_app Contribute to yscho03/sample_slack_app development by creating an account on GitHub. github.com Slack Bot 생성 1. api.slack 접속 Step1: https://api.slack.com/ 에 접속 Step2: “Your apps”을 클릭 2. APP 생성 Step1: "Create New APP" 을 클릭 Step2: From scratch을 선택 Step3: "APP Name" 을 설정하고 "workspace"를 를 선택 3. Bot 생성 Bot은 APP의 하위 단계의 유닛으로.. 2023. 3. 31.
ChatGPT API를 사용해보자 사전 준비ChatGPT API 문서 : https://platform.openai.com/docs/guides/chat/chat-vs-completionsAPI Key 발급 : https://platform.openai.com/account/api-keys 사용 방법1. 필수 패키지 importimport openai2. API Key 설정API Key 발급 을 통하여 발급한 키를 입력하여준다.openai.api_key = '[YOU-OPENAI-API]'3. 요청 함수 정의def request_chatgpt(msg): return openai.ChatCompletion.create( model='gpt-3.5-turbo', messages=msg )4. 초기 요청시일반적으로 대화는 먼저 시스템 메시지로.. 2023. 3. 6.
센세이션을 불고 온 ChatGPT 개요 ChatGPT 열풍이 한창이다. 뉴스와 유투브, 친구들과 회사에까지 이 주제로 떠들썩하다. 그도 그럴 것이 구글이나 넷플릭스가 몇 년에 걸쳐 달성한 사용자를 단 몇 개월 만에 이루 냈으며 기능 또한 놀라웠기 때문이다. 질문만 하면 여러 분야에 걸친 방대한 지식을 기가 막히게 찾아서 문장을 생성해 내고 보여줬기 때문이다. 이전에 나온 GPT-2나 Bert 등이 안 좋았다는 건 아니다. 어느 정도 한계가 보여줬던 면들을 혁신적이게 바꿔놓았기 때문이다. 무엇이 가능한가? 정보 검색을 해준다. 구글이나 네이버 등의 포털 사이트에서 검색하듯이 "헬스로 살을 빼려면 어떤 식으로 계획을 세우는 것이 좋을까?" 등 운동 정보 뿐만 아니라 IT, 건강, 정치 등 다양한 부분에서 2021년까지 수집한 정보를 기반으로.. 2023. 2. 20.
DeepSpeed란 무엇인가? DeepSpeed 개요 큰 모델은 순수한 데이터 병렬 처리로 쉽게 메모리가 부족하고 모델 병렬 처리를 사용하기 어렵다. DeepSpeed는 이러한 문제를 해결하여 모델 개발 및 훈련을 가속화 시킬 수 있다. DeeSpeed란? DeeSpeed API는 PyTorch의 경량 래퍼이다. 새로운 플랫폼을 배우지 않고도 PyTorch에서 좋아하는 모든 것을 사용할 수 있는 장점이 있다. DeepSpeed는 모델 개발에 집중할 수 있도록 분산 훈련, 혼합 정밀도 등 하이퍼파라미터를 관리한다. 가장 중요한 것은 DeepSpeed의 고유한 효율성 및 효율성 이점을 활용하여 PyTorch 모델에 대한 몇 줄의 코드 변경만으로 속도와 확장성을 높일 수 있다. 속도 DeepSpeed는 컴퓨팅/통신/메모리/IO에 대한 효율.. 2023. 2. 6.
Elasticsearch Snapshot S3 설정 방법 Elasticsearch 공식 문서를 참조하였습니다. 설정 방법 1. repository-s3 플러그인 설치 설치 완료 후 클러스터 재기동 필요합니다. $ bin/elasticsearch-plugin install repository-s3 2. aws 키 설정 testuser 라는 AWS S3 client name 으로 설정해보자. $ bin/elasticsearch-keystore add s3.client.testuser.access_key Enter value for s3.client.testuser.access_key: $ bin/elasticsearch-keystore add s3.client.testuser.secret_key Enter value for s3.client.testuser.sec.. 2023. 1. 10.
deep-text-recognition-benchmark 학습 환경설정 1. Conda 환경 생성 [root@server ~]$ conda create -n deep_text_recognition python=3.7 [root@server ~]$ conda activate deep_text_recognition (deep_text_recognition) [root@server ~]$ conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=10.2 -c pytorch 2. CRAFT-pytorch 소스 다운로드 (deep_text_recognition) [root@server ~]$ https://github.com/clovaai/deep-text-recognition-bench.. 2022. 12. 1.
Craft Model 사용법 환경설정 1. Conda 환경 생성 [root@server ~]$ conda create -n craft_model python=3.7 [root@server ~]$ conda activate craft_model (craft_model) [root@server ~]$ conda install pytorch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1 cudatoolkit=10.2 -c pytorch 2. CRAFT-pytorch 소스 다운로드 (craft_model) [root@server ~]$ git clone https://github.com/clovaai/CRAFT-pytorch.git (craft_model) [root@server ~]$ cd CRAFT.. 2022. 12. 1.
YOLOv7에 대해 알아보자 YOLO란? YOLO는 You Only Look Once의 약자로 Object detection 분야에서 널리 알려진 모델이다. 처음으로 One-Stage-Detection (분류와 추론을 동시에 함)방법을 고안해 실시간으로 Object Detection이 가능하게 만들었다. YOLO 특징 이미지를 분할하지 않고 이미지 한 장에서 분석이 가능합니다. (R-CNN과 같은 경우는 이미지 분할하여 CNN으로 추론) 다양한 전처리 모델과 인공 신경망을 결합해서 사용하는 이전 방식이 아닌 통합된 모델을 사용합니다. 실시간으로 객체를 탐지 할 수 있는 것이다. 기존의 Faster R-CNN보다 6배 빠른 성능을 보여줍니다. YOLOv7 모델 YOLO(You Only Look Once) v7 모델은 YOLO 모델 제.. 2022. 11. 22.
YOLOv7를 활용한 Object Detection 환경구성 1. conda 환경 생성 [root@ai-server ~] conda create -n yolov7 python=3.7 [root@ai-server ~] conda activate yolov7 (yolov7) [root@ai-server ~] conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch 2. yolov7 프로젝트 clone (yolov7) [root@ai-server ~] git clone https://github.com/WongKinYiu/yolov7.git (yolov7) [root@ai-server yolov7] cd yolov7 (yolov7) [root@ai-s.. 2022. 11. 21.
Keras 멀티 GPU 사용 방법 Keras로 멀티 GPU를 사용하려고 실제 훈련을 시켜보면 GPU 한 개만 점유해서 사용하여 멀티 GPU를 활용하지 못하는 경우를 볼 수 있다. 간단한 이유는 Keras와 Tensorflow 버전 호환성 문제이기 때문이다. 이럴때 간혹 외국 사이트나 다른 블로그를 보면 Tensorflow 버전을 1.5, 1.4로 낮추면 된다고 써져있는데 전혀 그럴 필요가 없다. Tensorflow 2.6 이상부터 Keras가 별개 패키지로 관리되기 때문에 이전 버전은 유연하게 대응하도록 하자. 환경 Keras==2.3.1 tensorflow==2.2.0 대응 방법 1. Keras 패키지의 Tensorflow Backend의 _get_available_gpus 함수를 Overwrite 한다. import keras.bac.. 2022. 11. 21.
Chrome 효과적인 유저 디렉토리 설정 방법 Chrome을 사용하면 기본적으로 "C:\Users\\AppData\Local\Google\Chrome" 의 디렉토리로 기본 지정되게 된다. 용량이 C 드라이버가 많으면 상관없겠지만 실수로 C 드라이버를 포멧한다거나 C 드라이버 용량 이슈로 불가피하게 다른 경로로 지정할 필요가 있다. 많은 블로그를 찾아보면 Chrome 바로가기 아이콘의 기동 옵션에 --user-data-dir 설정하면 해결되지만 응용 프로그램등 다른 프로그램에서 클릭하게되면 옵션을 설정한 바로가기가 아닌 Chrome.exe을 실행하게 되므로 --user-data-dir 경로가 무효화 되버리게 된다. 근본적으로 해결하는 것은 레지스트리까지 같이 변경하는 것이지만 공사가 커진다. Chrome의 사용자 디렉토리 변경하려다가 하루종일 크롬 설.. 2022. 11. 18.
바이트 페어 인코딩 (BPE - Byte Pair Encoding) 기본 개념 UNK : 단어 사전에 없는 단어란 의미에서 해당 토큰을 UNK(Unknown Token)라고 표현한다. OOV : 모르는 단어로 인해 문제를 푸는 것이 까다로워지는 상황을 OOV(Out-Of-Vocabulary) 문제라고 한다. 서브워드 분리(Subword segmenation) 작업은 하나의 단어를 더 작은 단위의 의미있는 여러 서브워드들(Ex) birthplace = birth + place)의 조합으로 구성하여 OOV나 희귀 단어, 신조어와 같은 문제를 완화시킬 수 있는 방법이다. BPE (Byte Pair Encoding) BPE(Byte pair encoding) 알고리즘은 1994년에 제안된 데이터 압축 알고리즘 BPE은 기본적으로 연속적으로 가장 많이 등장한 글자의 쌍을 찾아서 .. 2022. 9. 8.
python 파일 용량이 큰 파일을 읽을 경우 from functools import partial def chunked_file(fp, block_size=1024 * 1024 * 50): # 50MB return [chunk for chunk in iter(partial(fp.read, block_size), '')] def read_file(file_path): with open(file_path) as f_read: return chunked_file(f_read) # 사용방법 file_path = "/data/large_file.txt" for content in read_file(file_path): someting(content) 2022. 9. 1.
fairseq를 활용한 기계 번역 데이터 준비 root@server:~# ls -al /home/data -rw-rw-r-- 1 data data 175393 8월 30 08:40 test.en -rw-rw-r-- 1 data data 247383 8월 30 08:40 test.ko -rw-rw-r-- 1 data data 15706983 8월 30 08:40 train.en -rw-rw-r-- 1 data data 21556330 8월 30 08:40 train.ko -rw-rw-r-- 1 data data 184784 8월 30 08:40 valid.en -rw-rw-r-- 1 data data 252103 8월 30 08:40 valid.ko 데이터 전처리 바이너리로 변환, 딕셔너리 구축한다. root@server:~# fairse.. 2022. 8. 31.
한글 형태소 분석기 종류 한글 형태소 분석기 (KoNLPy) 1. Okt (Open Korea Text) from konlpy.tag import Okt okt = Okt() text = "가장 유명한 100가지 명언. 하루에 3시간을 걸으면 7년 후에 지구를 한바퀴 돌 수 있다. " print(okt.morphs(text)) print(okt.pos(text)) print(okt.nouns(text)) # ['가장', '유명한', '100', '가지', '명언', '.', '하루', '에', '3시간', '을', '걸으면', '7년', '후', '에', '지구', '를', '한', '바퀴', '돌', '수', '있다', '.'] # [('가장', 'Noun'), ('유명한', 'Adjective'), ('100', 'Numbe.. 2022. 8. 31.
NLP 토큰화 (Tokenization) 처리 방법 토큰화란? 토큰(token)이라 불리는 단위로 나누는 작업을 토큰화(tokenization)라고한다. 토큰의 단위가 상황에 따라 다르지만, 보통 의미있는 단위로 토큰을 정의한다. 단어 토큰화 (Word Tokenization) 토큰의 기준을 단어(word)로 하는 경우, 단어 토큰화(word tokenization)라고 한다. 다만, 여기서 단어(word)는 단어 단위 외에도 단어구, 의미를 갖는 문자열로도 간주되기도 한다. from nltk.tokenize import word_tokenize text = "God is Great! I won a lottery." print(word_tokenize(text)) ['God', 'is', 'Great', '!', 'I', 'won', 'a', 'lotte.. 2022. 8. 31.
기계 번역의 정의 기계 번역이란? 기계 번역은 인공 지능을 사용하여 사람의 개입 없이 한 언어에서 다른 언어로 텍스트를 자동으로 번역하는 프로세스이다. 현대적 기계 번역은 단순한 단어 대 단어 번역을 넘어 원래 언어 텍스트의 전체 의미를 대상 언어로 전달한다. 기계 번역 이점 자동 번역 지원 기계 번역은 전문적인 번역가들에게 좋은 출발점을 제공한다. 번역을 자동으로 실행한 다음, 사후 편집을 위해 번역가에게 보내는 설정이 있다. 속도와 번역량 기계 번역은 거의 즉각적으로 수백만 개의 단어를 번역하면서 매우 빠르게 작동한다. 실시간 채팅이나 대규모 법률 사례와 같은 대량의 데이터를 번역할 수 있다. 다양한 언어 선택 많은 주요 기계 번역 공급자는 50~100개 이상의 언어를 지원한다. 경제적인 번역 기계 번역은 기본적이지만.. 2022. 8. 31.
백 트래킹 기법 1. 백 트래킹 기법 백트래킹 (backtracking) 또는 퇴각 검색 (backtrack)으로 부름 제약 조건 만족 문제 (Constraint Satisfaction Problem) 에서 해를 찾기 위한 전략 해를 찾기 위해, 후보군에 제약 조건을 점진적으로 체크하다가, 해당 후보군이 제약 조건을 만족할 수 없다고 판단되는 즉시 backtrack (다시는 이 후보군을 체크하지 않을 것을 표기)하고, 바로 다른 후보군으로 넘어가며, 결국 최적의 해를 찾는 방법이다. 실제 구현시, 고려할 수 있는 모든 경우의 수 (후보군)를 상태공간트리(State Space Tree)를 통해 표현 각 후보군을 DFS 방식으로 확인 상태 공간 트리를 탐색하면서, 제약이 맞지 않으면 해의 후보가 될만한 곳으로 바로 넘어가서.. 2022. 8. 11.
기계 번역 - 오픈 소스 벤치마킹 기계 번역이란? NLP는 컴퓨터가 사람의 언어를 이해하는 목표를 가진다. 자연어는 생략과 중의성이 많아 컴퓨터가 이해하기 어렵다. 기계 번역 오픈 소스 이름 회사 언어 및 프레임워크 Transformers HuggingFace Pytorch, Tensorflow Fairseq Facebook Pytorch Tensor2tensor Google Tensorflow OpenNMT-py OpenNMT Pytorch Sockeye Amazon MXNet Marian Microsoft C++ 2022. 8. 9.
GitLab - Git submodule 특정 디렉토리 추가 방법 ▶ 메인 프로젝트 (main_project) application ㄴsubmodule ㄴ ▶ 서브 프로젝트 (sub_project) application ㄴfontweb >.git/modules/sub_project/info/sparse-checkout 7. git 업데이트 git submodule update --force --checkout sub_project 2022. 6. 27.
WSL2 포트 포워딩 방법 포트 포워딩 (Port Forwarding) WSL2에서 포트를 오픈해도 Windows 호스트 또는 외부에서 접근이 불가하여 Port를 포워딩해주어야 한다. 1. PS1 스크립트 작성 forwarding.ps1 적당한 이름으로 스크립트를 작성한다. 오픈할 포트를 $ports에 넣어주면 된다. 예) $ports=@(8000, 8888); If (-NOT ([Security.Principal.WindowsPrincipal][Security.Principal.WindowsIdentity]::GetCurrent()).IsInRole([Security.Principal.WindowsBuiltInRole] "Administrator")) { $arguments = "& '" + $myinvocation.mycomm.. 2022. 5. 30.
728x90
반응형