-
vllm + lm-evaluation-harness OOM
Env os: Ubuntu 22.04 nvidia driver version: 535.183.01 cuda: 12.4 vllm version: 0.6.3.post1 torch version: 2.4.0+cu124 transformers version: 4.46.3 Error export MODEL_NAME="/data/models/gemma-2-27b-it" export TAKS="..." lm_eval --model vllm --model_args pretrained=$MODEL_NAME,tensor_parallel_size=2,gpu_memory_utilization=0.7,dt... Read More
-
vLLM error - gemma계열 모델에서 발생하는 오류
Env os: Ubuntu 22.04 nvidia driver version: 535.183.01 cuda: 11.8 vllm version: 0.5.3 torch version: 2.3.1 transformers version: 4.45.2 Error vllm을 통해 gemma-2-27b-it 모델 load시 아래와 같은 에러 발생 ... (VllmWorkerProcess pid=239160) INFO 11-15 04:16:07 model_runner.py:680] Starting to load model /data/models/gemma-2-27b-it/... Loadi... Read More
-
(LLM-University) 1-4. Reranking
Reranking Reranking은 다음과 같이 작동합니다: 각 (쿼리, 응답) 쌍에 대해 관련성 점수를 부여합니다. 이름에서 암시하듯이, 응답이 쿼리와 관련성이 높은 경우 높은 점수를 부여하고, 그렇지 않은 경우 낮은 점수를 부여합니다. 이 장에서는 이 모듈에서 이전에 찾은 위키피디아 검색 결과를 개선하기 위해 재정렬을 사용하는 방법에 대해 배울 것입니다. Using Rerank to Improve Keyword Search Reranking은 기존의 search system의 성능을 끌어올려주는 굉장한 방법론입니다. 짧게 말해서, reranking은 query와 response를 받고 그들끼리의 rele... Read More
-
Solving Docker Connection Issues with OpenWebUI and Ollama Models
구현 사항 Ollama 설치 후, custom directory 설정을 통해 model storage 확보 + docker + OpenWebUI에서 아무 모델이나 Inference 확인 에러 1. Ollama 설치 후 모델 다운로드 & OpenWebUI 접속 ollama run llama3.2:1b -> base directory에 모델 다운로드 CLI에서 Inference 확인 docker run -d -p 3000:8080 --gpus all -v open-webui:/app/backend/data --name open-webui ghcr.io/open-webui/open... Read More
-
(LLM-University) 1-3. Dense Retrieval
Dense Retrieval Who discovered penicillin? Who was the first person to win two Nobel prizes? Keyword search를 통해 첫번째 query는 잘 작동했지만 두번째 query는 그렇지 못했습니다. 두번째 query에는 실제로 많은 document에 query에 있는 단어들이 불필요하게 많이 포함되어 있기 때문입니다. 좋은 결과를 얻어내는 방법으론 모델이 ‘잘 이해할 수 있는’ 질문을 하는 것입니다. 바로 이 부분에서 Semantic Search가 기인합니다. Semantic Search는 단순한 키워드 매칭이 아닌 의미를 ... Read More
-
(LLM-University) 1-2. Keyword Search
Querying the Wikipedia Dataset Using Keyword Matching Weaviate vector database와 cohere api를 사용하여 keyword search 알고리즘을 구현한 결과는 아래와 같습니다. Simple query: “Who discovered penicillin?” Hard query: “Who was the first person to win two Nobel prizes?” 첫번째 simple query에 대한 유사한 vector 데이터값들은 잘 찾은 것(Weaviate vector database에 페니실린을 개발한 사람에 대한... Read More
-
(LLM-University) 1-1. What is Semantic Search?
What is Not Semantic Search? Semantic Search 이전, 가장 유명한 검색 방법은 keyword search 였습니다. 다음의 예를 봅시다. Query: Where is the world cup? Response: The world cup is in Qatar. The sky is blue. The bear lives in the woods. An apple is a fruit. Keyword search 결과는 다음과 같을 것입니다. Response: The world cup is in Qatar. (4 words in common) The sky... Read More
-
vllm - when loading the weights, occurs infinite loading problem
problem tensor-parallel-size 1 이상 값으로 지정시, weight 무한 로딩 문제 export MODEL_NAME="..." export OPENAI_API_KEY="..." vllm serve $MODEL_NAME -tp 2 ... (VllmWorkerProcess pid=3230) INFO 10-08 07:16:13 multiproc_worker_utils.py:215] Worker ready; awaiting tasks (VllmWorkerProcess pid=3230) INFO 10-08 07:16:13 utils.py:784] Found nccl from librar... Read More
-
python enum
enum enum(열거형)은 이름이 있는 상수들의 집합을 정의하는 데 사용됩니다. 보통 특정 값들 중 하나만 선택할 수 있는 상황에서 유용합니다. 예를 들어, 요일이나 색상, 상태와 같은 값을 나타낼 때 사용할 수 있습니다. enum을 사용하면 가독성이 높아지고, 코드에서 잘못된 값이 사용되는 것을 방지할 수 있습니다. 특징 고유한 값: 열거형의 각 멤버는 고유한 값이어야하며, 이름도 중복될 수 없습니다. 순회 가능: 열거형 클래스의 멤버들을 for루프에서 순회할 수 있습니다. 비교 가능: 열거형의 값은 ==, is 등으로 비교할 수 있습니다. 이름과 값에 접근 가능: .name으로 멤... Read More
-
python enumerate function
enumerate enumerate()함수는 파이썬에서 list나 tuple과 같은 iterable(이터러블) 객체를 순회하면서, 해당요소의 인덱스와 값을 동시에 반환해주는 함수. 보통 for 반복문과 함께 사용. 기본 구문 enumerate(iterable, start = 0) iterable: 리스트, 튜플, 문자열 등 순회 가능한 객체. start: 인덱스의 시작 값을 지정. 기본값은 0 반환값 enumerate()는 이터레이터를 반환하며, 각 요소에 대해 (index, value) 형식의 튜플을 생성 예시 리스트를 enumerate를 순회 fruits = ... Read More
-
python map function
map map() 함수는 파이썬에서 반복 가능한 객체의 모든 요소에 대해 지정된 함수를 적용하는 함수. 원본 데이터를 변형하여 새로운 데이터를 생산하는 데 사용. 이 함수는 lazy evaluation을 사용하여 결과를 바로 계산하지 않고 필요할 때만 값을 계산하는 특성을 지니고 있다. 구문 map(function, iterable, ...) 동작 원리 map 함수는 반복 가능한 객체의 각 요소를 순서대로 함수에 전달하고, 그 결과를 돌려주는 이터레이터를 반환. 예시1: 단일 반복 객체 사용 def square(x): return x**2 nums = [1, 2, 3, 4, 5] resul... Read More
-
pytest
pytest pytest는 Python에서 가장 널리 사용되는 테스트 프레임워크 중 하나로, 유닛테스트, 통합테스트 등 다양한 테스트를 쉽고 유연하게 작성하고 실행할 수 있도록 도와줍니다. 이 패키지는 매우 직관적이고 간결한 문법으로 제공하여, 복잡한 테스트 코드를 단순하게 작성할 수 있습니다. pytest는 기본적으로 python의 내장 unittest 프레임워크보다 더 많은 기능과 유연성을 제공합니다. 주요 특징 간결한 테스트 함수: pytest는 클래스나 메서드 기반이 아닌, 단순한 함수로 테스트를 작성할 수 있습니다. 별도의 클래스나 setup, teardown 메서드를 작성할 필요 없이 간단한 함... Read More
-
python abstract class
Claass - Inheritance 상속의 기본 개념 부모 클래스 (Super/Parent Class): 다른 클래스에게 속성과 메서드를 물려주는 클래스입니다. 자식 클래스 (Sub/Child Class): 부모 클래스의 속성과 메서드를 물려받는 클래스입니다. Examples class Employee: def __init__(self, name, salary): self.name = name self.salary = salary def work(self): print(f"{self.name} is working.") class Man... Read More
-
Outrageously large neural networks - the sparsely-gated mixture-of-experts layer [2017]
Background Read More
-
Chat Vector - A Simple Approach to Equip LLMs with Instruction Following and Model Alignment in New Languages [2024]
Background LM의 대단한 진보에도 불구하고 오픈소스 데이터의 제한 등으로 인해 특징 지역의 언어 LM 개발 침체 non-English LLM의 개발엔 상당한 resource 필요 Chat-Vector non-English LLM을 처음부터 끝까지 개발하기엔 매우 많은 resource가 필요하기 결과적으로 Llama2, BLOOM과 같은 foundation model이 탄생 Chat vector는 단지 base model에 상응하는 chat 모델로부터 사전학습된 base model의 가중치를 빼 만들어짐 특정 CP(continual pre-training) 모델에 target ... Read More
-
Toward Self-Improvement of LLMs via Imagination, Searching, and Criticizing (AlphaLLM) [2024]
Introduction Self-correction & self-learning 계열 LLM의 2가지 핵심 전략 모델 자신의 response를 이전의 response의 feedback에 근거하여 지속해서 재정의 PPO나 DPO 방식으로 학습된 reward model을 통해 직접 response를 샘플링 그러나 LLM이 자신의 출력에 대해 효과적으로 비평하여 응답 품질을 향상시키거나 응답의 품질을 나타내는 scalar reward를 적용할 수 있는지는 특히 복잡한 계획 및 추론을 요구하는 상황에서 지속적인 연구 주제로 남아있었음. MCTS와 reinforcement learning을 통해 모델이... Read More
-
DoRA - Weight Decomposed Low-Rank Adaptation [2024]
Introduction NLP, multi-modal과 같은 각종 downstream task로부터의 application은 넓은 방향으로 확장되고 있습니다. 이 특정한 task에 모델을 적용시키기 위해선 full fine-tuning(FT)을 적용해야하는데 모델이나 데이터셋의 크기에 따라 그에 따른 resource도 굉장히 많이 필요로 하는 실정입니다. 이러한 관점에서 parameter-efficient fine-tuning(PEFT) 방법론이 나타났고 사전학습된 모델을 매우 적은 수의 파라미터만을 파인튜닝 하는 방식입니다. 그 중 LoRA는 모델의 구조를 변화시키지 않고 가장 효율적으로 학습할 수 있는 대표... Read More
-
VERA - Vector Based Random Matrix Adaptation [2024]
Introduction 대언어모델시대에 효율적인 학습방법, GPU 메모리요건 등에 대해 언급하고 있습니다. GPT-4와 같은 SOTA모델들이 급증하고 있는 상황에서 LoRA와 같은 파인튜닝 기법은 여전히 효과적이고 메모리를 줄일 수 있는 방법으로 소개되고 있습니다. GPT-3의 경우, query나 value 레이어에 Rank 16의 LoRA를 적용하면 최소 288MB의 메모리를 요구하나, single-precision으로 저장할 경우, 사용자당 약 배만 개의 미세조정된 가중치가 있을때 275TB에 달합니다. 개인화된 어시스턴트, edge devices, 이와 같은 유사한 application의 확산속에서 모델... Read More
-
PEFT new features
PEFT v0.10.0 v0.10.0: Fine-tune larger QLoRA models with DeepSpeed and FSDP, layer replication, enhance DoRA Deprecations prepare_model_for_int8_training 사용 불가 -> prepare_model_for_kbit_training 대체 Improving DoRA Last release, we added the option to enable DoRA in PEFT by simply adding use_dora=True to your LoraConfig. However, th... Read More
-
PEFT new features
PEFT v0.9.0 v0.9.0: Merging LoRA weights, new quantization options, DoRA support, and more DoRA support We now support Weight-Decomposed Low-Rank Adaptation aka DoRA via #1474. This new method is builds on top of LoRA and has shown very promising results. Especially at lower ranks (e.g. r=8), it should perform much better than LoRA. Right ... Read More
-
pip 설치 옵션
Pip Options 모든 pip 설치 옵션, pip install - Usage Reference what does no-build-isolation do? Read More
-
torch tensor manipulation3
broadcasting indexing & slicing import torch x = torch.arange(0, 256, dtype = torch.int64, device = 'cpu').float() print(f"original x size: {x.size()}") x_expanded = x[None, :, None, None] print(f"expanded x size: {x_expanded.size()}") original x size: torch.size([256]) expanded x size: torch.Size([1, 256, 1, 1]) x = torch.randn(4, 4,... Read More
-
Compare to Activation Function
case 1 import torch import torch.nn as nn from transformers import AutoModel, AutoModelForSequenceClassification class CustomBaseModel(nn.Module): def __init__(self, model_name: str, num_classes: int = 3, dr_rate: float = 0.2): super(CustomBaseModel, self).__init__() self.num_classes = num_classes self.dr_rate = d... Read More
-
TypeError - TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]]
Error TypeError: TextEncodeInput must be Union[TextInputSequence, Tuple[InputSequence, InputSequence]] 원인 Data-Augmentation을 위해 데이터셋 Re-generation 후, 학습 모듈 실행 도중 에러 발생 tokenization 과정에서 오류 발생 확인 결과, Data-Augmentation하면서 특정 category의 데이터에 missing values가 발생되어 해당 오류 발생하였음 Solution df = pd.read_csv(...) df = df.dropna(axis = 0) df = ... Read More
-
Message History
Message History client = OpenAI(api_key = "sk-xxx") res_message = [ {"role" : "system", "content" : "You're Assistant of AI that act to like a murderer sarcastic and humiliate."}, {"role" : "user", "content" : "What is meaning of love?"} ] response1 = client.chat.completion.create( model = "gpt-3.5-turbo", messages... Read More
-
Utilizing Variable Arguments in Python - args and kwargs
argument를 직접 지정한 함수 사용 def print_args(args1, args2): print(f'args: [ {args1} ]') print(f'args: [ {args2} ]') print_args("apple", "banana") >>> arg1: [ apple ] >>> arg2: [ banana ] *args 사용 키워드 되지 않은 가변적인 갯수의 인자들을 함수에서 필요로 할 때 사용 함수의 인자를 몇 개 받을지 모르는 경우에 사용하면 매우 유용 *args는 인자를 tuple로 전달 만약 정해지지않은 n개의 인자를 받고... Read More
-
정규표현식으로 텍스트 전처리
Problem >>> df = pd.DataFrame(data = {"text" : ["[홍길동] [오전 04:25] 안녕하세요?"]}) >>> df.loc[0].text [홍길동] [오전 04:25] 안녕하세요? 위 문자 중, ` 04:25` 문자만 삭제하고싶음. (숫자 정보 앞 공백도 같이!) >>> pattern = r"[\s{0-9}{2}:{0-9}{2}]" 위 방식으로 없애려 했으나 문장 내의 모든 공백이 삭제되었음.. Solution >>> pattern = r"\s\d{1,2}:\d{1,2}" >>... Read More
-
The Power of Scale for Parameter-Efficient Prompt Tuning [2021]
Introduction ELMo 이래로 언어모델의 패러다임이 model tuning(=fine-tuning)으로 바뀌게 되었음. 더 최근에 prompt design(=priming)은 text-prompt를 통해 GPT-3 모델의 결과를 놀라울 정도로 효과적으로 만들어줬음. 프롬프트는 전형적으로 task description이나 몇몇의 canonical 예시로 구성되어있음. 특히 모델 사이즈가 계속해서 커져가는 추세에 이런 사전학습모델을 고정하는 방법론은 다소 매력적임. 각 downstream task에 맞춰 각각의 모델을 단순 copy 하는 방식보다 단일의 generalist model을 통해 동시다발적으로 다... Read More
-
EDA - Easy Data Augmentation Techniques for Boosting Performance on Text Classification Tasks [2019]
Introduction 그간 NLP 분야에서 많은 진보가 이루어 졌지만 data-augmentation에 대한 research는 vision이나 speech field에 비해 미미하였음. 그나마 data-augmentation에 대한 가장 보편이거나 잘 알려진 방법으론 back-translation, nosing as smoothing, 동의어 대체를 통한 predictive LM 등이 있다. 이러한 방법론이 존재하지만 이는 모두 구현에 있어서 비용이 많이 드는 단점이 있다. 때문에 이번 연구에서는 universal data에 대한 매우 쉬운 data-augmentation 방법론을 제시하고 이를 ED... Read More
-
Ziya2 - Data-centric Learning is All LLMs Need [2023]
Introduction 최근 LLM 연구가 매우 활발하고 이루어지고 있으나 다음과 같은 중대한 문제점이 존재한다. 첫째, high cost of pre-training models from scratch. 둘째, open-source LLMs often do not come with open-source data. 셋째, many studies on LLMs prioritize increasing model size. 이에 따라 이번 연구에선 continual pre-training의 technique과 understanding the intri... Read More
-
LoftQ - LoRA-Fine-Tuning-Aware Quantization for Large Language Models [2023]
LoftQ LoftQ라고 불리는 새로운 quantization framework를 소개. 이 프레임워크는 낮은 순위의 근사치를 적극적으로 통합하여 양자화와 함께 작동하여 원래의 high-precision 사전학습된 가중치를 공동으로 근사화합니다. Experiments Uniform Quantization: 클래식 quantization 방식. 연속적인 간격을 균일하게 간격을 2N 카테고리로 균일하게 나누고, de-quantization을 위한 로컬 최대 절대값을 저장 NormalFloat4 & 2-bit variant NormalFloat2: QLoRA논문에서 제안한 q... Read More
-
When fine-tuning LLM with a transformer, encountering OOM (Out of Memory) errors
Env OS: Ubuntu 22.04 python: 3.10.12 transformers: latest (4.37.0.dev0) peft: latest (0.7.2.dev0) bitsandbytes: latest (0.41.0) accelerate: latest (0.23.0) Error Trainer.train() fine-tuning 진행할때, 몇 스텝 못밟고 OOM error 발생하는 현상 절대적인 GPU resource 부족으로 인해 나타날 수 있는 OOM과는 명백하게 구분 GPU allocated memory가 stable 하지 않고 지속적으로 증가하는 ... Read More
-
Change model input sequence length
Env OS: Ubuntu 22.04 python: 3.10.12 transformers: 4.31.0.dev0 Model Input Sequence Length transformers 라이브러리 사용하고 Input Sequence 길이를 더 길게 변경해주고 싶을때 물론 tokenizer의 padding = "max_length", truncation = True, max_length = 2048와 같은 옵션을 줘서 문장 길이를 맞춰줄 수도 있지만 backbone 모델의 input sequence length가 맞추려는 길이보다 짧을 경우 다음과 같은 에러 발생 >>>... Read More
-
OOM error solution - Llama2 70b
Env OS: ubuntu 22.04 python: 3.10.12 transformers: 4.34.0 peft: 0.5.0 bitsandbytes: 0.41.1 accelerate: 0.23.0 torch: 2.1.0+cu118 nvidia-driver-version: 525.147.05 GPU: A100 x 8ea (80GBx8) Error transformer.Trainer로 fine-tuning 작업 진행 시, 몇개의 스텝만 진행되다가 OOM 발생 memory leakage 현상, memory가 stable되지 않고 스텝별 gpu allocated memor... Read More
-
torch tensor manipulation2
squeeze, unsqueeze 함수 정리 squeeze size가 1인 dimension 삭제 x = torch.ones(10, 5, 1, 1) x.shape >>> torch.Size([10, 5, 1, 1]) xs1 = x.squeeze() xs1.shape >>> torch.Size([10, 5]) size가 1인 차원 일부 삭제 가능 xs2 = x.squeeze(dim = 2) xs2.shape >>> torch.Size([10, 5, 1]) -1값을 넣어 접근가능 x3 = x.squeeze(dim = -1) x3.... Read More
-
torch tensor manipulation1
view, reshape, transpose 함수 정리 t = torch.tensor([[[0, 1], [2, 3], [4, 5]], \ [[6, 7], [8, 9], [10, 11]], \ [[12, 13], [14, 15], [16, 17]], \ [[18, 19], [20, 21], [22, 23]]]) print(t) print(t.size()) tensor([[[ 0, 1], [ 2, 3], [ 4, 5]], [[ 6, 7], [ 8, 9]... Read More
-
CUDA error - device-side assert triggered Compile with TORCH_USE_CUDA_DSA to enable device-side assertions.
Env OS : Ubuntu 22.04 python : 3.10.12 transformers : 4.35.2 colab Error (ko)bart 베이스모델에서 tokenization -> model generation 할때 오류 발생 from transformers import PreTrainedTokenizerFast, BartForConditionalGeneration import torch model_id = 'Sehong/kobart-QuestionGeneration' tokenizer = PreTrainedTokenizerFast.from_pretrained(qg... Read More
-
Implementation on Text-Generation Inference (TGI)
Env OS : Ubuntu 20.04 Docker : 24.0.6 1 TGI에 모델을 적재시키기 위해선 lora 파인튜닝 모델 -> standalone 모델 변환(Full-finetuning 모델 필요X) def main( base_model_id: str, lora_model_id: str, output_dir: str ): tokenizer = AutoTokenizer.from_pretrained(base_model_id) base_model = AutoModelForCausalLM.from_pretrained(base_mo... Read More
-
docker - error response from daemon could not select device driver "" with capabilities [[gpu]]
Env OS : Ubuntu 20.04 Issue $ docker run ~~~~~~ docker: error response from daemon: could not select device driver "" with capabilities: [[gpu]]. Solution nvidia-container-toolkit 설치 $ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \ && curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add ... Read More
-
DB 접속 오류 - You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near
Env OS : Ubuntu 20.04 python : 3.10.13 Issue DB Insert 구문 작동시 오류 발생 conn = pymysql.connect( host = config.DATABASE_CONFIG['host'], user = config.DATABASE_CONFIG['user'], password = config.DATABASE_CONFIG['password'], db = config.DATABASE_CONFIG['db'] ) curs = conn.cursor(pymysql.cursors.DictCursor) sql = """INSERT... Read More
-
netplan - No module named 'netifaces'
Env OS : Ubuntu 22.04 python : 3.10.12 Issue 폐쇄망에서 netifaces 모듈 오류 $ netplan apply File "/usr/sbin/netplan", line 20, in <module> from netplan import Netplan File "/usr/share/netplan/netplan/__init__.py", line 18, in <module> from netplan.cli.core import Netplan File "/usr/share/netplan/netplan/cli/core... Read More
-
가상환경 이슈 - Command '['/home/ubuntu/test/bin/python3', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
Env OS : Ubuntu 22.04 python : 3.10.12 Issue 가상환경 설치 후, activate 불가 현상 /test/bin/ 폴더에 activate 파일이 없음 $ python3 -m venv test >>> Error: Command '['/home/ubuntu/test/bin/python3', '-m', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1. $ source test/bin/activate >>> bash: test/bin/ac... Read More
-
Pytorch에서 CUDA 및 그래픽카드 인식 문제 - Unexpected error from cudaGetDeviceCount(). Did you run some cuda functions before calling NumCudaDevices() that might have already set an error?
Env OS : Ubuntu 22.04 GPU : Nvidia A100 * 8 nvidia-driver : 525.125.06 cuda : 11.8 pytorch : 2.1.0+cu118 Issue torch 설치 후, 그래픽드라이버 checking하는 과정에서 cuda 및 그래픽드라이버 인식 ❌ nvcc -V -> 11.8 정상적으로 출력 다른 사람들의 TS : reboot nvidia driver 재설치 cuda 또는 driver 버젼 mismatch -> 재설치 모두 시도해봤으나 해결 ❌ User... Read More
-
그래픽드라이버 버젼 이슈
Env Ubuntu 22.04 Nvidia A100 * 8 nvidia-driver : 535.xxx.xx Issue nvidia-smi 입력시 평소와 다르게 그래픽카드 정보가 나타나는 현상 발생 원인 그래픽드라이버 버전 문제로 예상 해결 compatiable 버젼 설치 후, 재부팅 sudo apt install nvidia-driver-525 sudo reboot 버젼 swap 후, 올바르게 인식하는지 확인 nvidia-smi +-------------------------------------------------------------------... Read More
-
LoRA Error - "expected scalar type Half but found Float"
PEFT-IA3 training 도중 오류 발생 에러 expected scalar type Half but found Float ... with torch.autocast('cuda'): trainer.train() transformers local variable "result" referenced before assignment # /venv/lib/python3.10/site-packages/peft/tuners/ia3.py # line 507 ... if is_bnb_available(): class Linear8bitLt(bnb.nn.Linear8bitLt... Read More
-
Connect to server in VSCode
VScode로 서버에 접속하여 개발 확장 -> Remote - SSH 설치 ‘CTRL + SHIFT + P’ 눌러 config 파일을 선택 Host [display_name] HostName [ip addr] User [account_name] Port [port number] (default : 22) ‘CTRL + SHIFT + P’ 눌러, Connect to Host 원격탐색기 -> 원격(터널/SSH) -> SSH -> [display_name] Read More
-
PEFT's Target Modules Mappings
# peft/utils/other.py in line 328 TRANSFORMERS_MODELS_TO_LORA_TARGET_MODULES_MAPPING = { "t5": ["q", "v"], "mt5": ["q", "v"], "bart": ["q_proj", "v_proj"], "gpt2": ["c_attn"], "bloom": ["query_key_value"], "blip-2": ["q", "v", "q_proj", "v_proj"], "opt": ["q_proj", "v_proj"], "gptj": ["q_proj", "v_proj"], "gp... Read More
-
IA3 - Few-shot Parameter-Efficient Fine-tuning is better and cheaper than In-Context Learning [2022]
Introduction ICL이라고 불리는 In-context Learning 방식은 프롬프트된 예제를 인풋에 넣음으로써 downstream task에서 더 잘 작동하게 만들어 주는 방식을 의미함. 특히 ICL은 gradient-based 학습이 필요하지 않기에 단일의 모델에 즉시 다양한 task에서 적용이 가능하다. ICL의 이러한 이점에도 불구하고 몇몇의 문제점이 존재함 input-target 쌍의 프롬프트된 데이터가 모델이 prediction을 계산하게 할 때 많은 양의 compute cost가 발생되게 한다 ICL은 전형적으로 파인튜닝과 비교하여 질낮은 성능을 생산해낸다 프롬프트의 정밀... Read More
-
IA3
IA3 IA3 방식이 peft에 추가되었길래 colab 환경(T4, 14GB)에서 간단하게 50steps만 학습 진행 What is IA3? IA3 method that scales activations by learned vectors, attaining stronger performance while only introducing a relatively tiny amount of new parameters. GPT-neoX example of training peft_IA3.ipynb Ref PEFT-release #578 ... Read More
-
Daily of Developing [8/1]
Workflow SelFee 방식에 영감을 받아 Self-Feedback method 적용 Model Question-Generation(eng) ThomasSimonini/t5-end2end-question-generation Question-Generation(kor) Sehong/kobart-QuestionGeneration SBERT sentence-transformers/all-mpnet-base-v2 Translation 데이터 보안 이슈로 인해 API 사용 x 번역 특화 모델 사용 KETI-AIR-Downstream/long-ke-t5-ba... Read More
-
Daily of Developing [7/29]
Error1 undefined symbol: cget_col_row_stats Solution $ cd {ENV}/lib/python-3.10/site-packages/bitsandbytes $ cp libbitsandbytes_cuda118.so libbitsandbytes_cpu.so cuda 버전에 맞게 파일을 복사해주면 됨 Error2 no gpu detected! check your cuda paths. proceeding to load cpu-only library… 갑자기 GPU를 인식 못함 Solution $ pip install bitsandbytes... Read More
-
Daily of Developing [7/27]
Data Processing TASK: 언어모델의 성능 향상을 위한 파인튜닝 데이터 re-preprocessing 정규표현식 특정 문자열의 형태를 반복하는 데이터 이후에 나오는 문장을 모두 삭제 Vol.{1~3자리 수} p.{1~3자리 수} 문자열 Vol 다음에 . 온점과 숫자가 오고, 그 뒤에 공백이 있으며 그 다음에 p, . 온점과 숫자가 오는 패턴 regexp = "Vol\.\d+\sp\.\d+" regexp_list = re.findall(regexp, data) try: data = data.split(regexp_list[0])[0].strip() excep... Read More
-
Daily of Developing [7/21]
Ubuntu 파일 이름 변경 mv 명령어로 파일이름 변경 및 위치 변경 모두 가능! $ mv [old_folder] [new_folder] $ ls abc bbb.txt $ mv abc xyz $ ls xyz bbb.txt GIT CA 에러 server certificate verification failed. CAfile: none CRLfile: none 인증서 신뢰하도록 설정 $ export GIT_SSL_NO_VERIFY=1 또는 전역으로 저장하고 싶으면 $ git config --global http.sslverify false git 접속 $ git confi... Read More
-
Daily of Developing [7/20] - Repo id must be in the form 'repo_name' or 'namespace/repo_name'
Error HFValidationError: Repo id must be in the form ‘repo_name’ or ‘namespace/repo_name’ Solution $ pwd /mnt/huggingface $ ls opt-125m version.txt $ ls opt-125m/ config.json generation_config.json merges.txt pytorch_model.bin special_tokens_map.json tokenizer_config.json vocab.json $ docker run --gpus all --shm-size 1g -p 8080:8... Read More
-
Daily of Developing [7/19]
Gradio Stream Gradio : transformers.TextIteratorStreamer def generate(user_message): prompt = f"### 질문: {user_message}\n\n### 답변:" model_inputs = tokenizer([prompt], return_tensors = 'pt', return_token_type_ids = False).to('cuda') streamer = TextIteratorStreamer(tokenizer, timeout = 100, skip_prompt = True, skip_special_t... Read More
-
Daily of Developing [7/17]
Docker 컨테이너 확인 $ docker ps -a 컨테이너 제거 $ docker stop <container ID> 또는 $ docker rm <container ID> 또는 $ docker container prune 용량 이슈 대처 모든 컨테이너 삭제, Active 되어있는 모든 컨테이너 중지 파일 경로 수동 지정, /var/docker/daemon.json { "data-root" : "/home/user/setup/docker-data" } $ docker info TGI E... Read More
-
Transformers TrainingArguments' Hyperparameters
하이퍼파라미터 인자 괄호 안의 문자는 차례대로 형태, default value를 의미합니다. 하이퍼파라미터 per_device_train_batch_size(int, 8) : 학습시에 사용되는 각 머신당 batch size를 의미 gradient_accumulation_steps(int, 1) : backward pass 및 update pass를 수행하기 전에 기울기를 누적할 업데이트 단계의 수 num_train_epochs(float, 3.0) : epoch max_steps(int, -1) : 양수로 지정하면 학습 steps의 수를 지정. num_train_epochs를 override. ... Read More
-
QLORA - Efficient Finetuning of Quantized LLMs [2023]
Introduction LLM을 finetuning하기에는 resource를 너~무 많이 필요로 함. 16bit로 LLaMA 65B 모델을 파인튜닝 하기 위해서는 780GB의 GPU메모리가 필요. 반면에 양자화 method는 LLM의 필요 메모리를 줄여줄 수 있음. 이에 연구진은 성능 저하 없이 quantized-4bit model 파인튜닝 하는 방법에 대해 소개. QLoRA는 4-bit로 사전학습된 모델을 양자화하기위해 독특한 high-precision technique를 사용하고 난 후에 학습가능한 LoRa 가중치의 적은 양을 추가함. 연구진은 실험에 Guanacon 계열 모델을 사용하였고 단일의 GPU만... Read More
-
QLoRA 파인튜닝 - trouble shooting 및 일지
Trouble Shooting 1 현상 AttributeError: ~/qlora/lib/python3.10/site-packages/bitsandbytes/libbitsandbytes_cpu.so: undefined symbol: cquantize_blockwise_fp16_fp4 해결 cd qlora/lib/python3.10/site-packages/bitsandbytes cp libbitsandbytes_cuda118.so libbitsandbytes_cpu.so cuda 버젼에 상응하는 파일을 복사(대체)해주면 된다 ref TimDettmers/bitsandbytes#156 (comment)... Read More
-
BEiT - BERT Pre-Training of Image Transformers [2022]
dd Read More
-
파인튜닝 과정에서 습득한 지식들
1 Increasing Speed a LLM Serving Inference #73 해당 이슈를 참고하여 도출한 결과, fp16으로 추론을 하면 속도향상에 도움이 된다. from transformers import AutoTokenizer, AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained(model_path, device_map = 'auto', torch_dtype = torch.float16) 현재, ChatKoAlpaca는 TensorParallel을 통해 서빙중이며 fp16 모델로 서비스 중 #81 해당 Is... Read More
-
ConvNeXt - A ConvNet for the 2020s [2022]
Instruction 지난 10년간 딥러닝의 ConvNet은 많은 발전을 이루어왔고 아키텍쳐를 디자인하기위한 engineering features는 성공적으로 변화되어져 왔습니다. VGGnet, Inception 등과 같은 많은 ConvNet은 정확도, 효율성 등과 같은 다른 측면에서 집중해왔으며 많은 실용적인 디자인 요소들로부터 유명해졌습니다. CV 분야에서의 ConvNet의 가치는 우연이 아닌게 sliding window 전략과 같은 것들로 인해 고유한 진보가 이루어 질 수 있었습니다. ConvNets은 Inductive bias를 적용시켜 CV의 다양한 task에 잘 적용시켰습니다. ConvNets의 기... Read More
-
ResNeXt - Aggregated Residual Transformations for Deep Neural Networks [2017]
Introduction 모델의 구조를 짜는 것은 많은 레이어를 가질수록 더 어렵게 되어가고 있음. VGG-net은 간단하나 효율적인 구조 전략을 내세웠음. 같은 shape을 가지는 block을 쌓음으로써 구조를 단순화 하였음. 이러한 idea를 차용한게 바로 ResNet으로 같은 topology의 모듈을 쌓은 형태의 모델임. 이 쌓는 행위의 단순한 구조는 하이퍼파라미터를 자유로운 선택을 줄여주며 depth는 신경망에서 essential dimension으로 노출되어짐. 이러한 간단한 구조가 연구진은 특정 데이터셋에서 파라미터가 과도하게 적용되는 위험을 줄여줄 수 있다고 주장. VGG-net과 ResNet의 강건성... Read More
-
EfficientNetV2 - Smaller Models and Faster Training [2021]
Introduction 최근 학습 효율성은 정말 큰 중요한 맹점임. ConvNets에선 attention layer를 합성곱 신경망에서 추가하여 학습 속도를 올리는데 집중하였음. ViT는 Transformer block을 사용함으로써 큰 스케일의 데이터셋을 사용할때 학습 효율성을 증가시키기도 하였음. 그러나, 파라미터 수가 너무 크기에 resource가 너무 비쌈. 이에 연구진은 training-aware의 NAS(neural architecture search)의 결합 + 학습속도와 파라미터효율성을 향상시키기위한 scaling를 사용함. 이전 연구에서 알아낸 점 매우 큰 이미지의 사이즈는 학습을 느... Read More
-
EfficientNet - Rethinking Model Scaling for Convolutional Neural Networks [2020]
Introduction 그간의 scale up 방법은 detph, width, resolution (image size)을 증가시켜주는 방법이긴 하지만 정확도와 효율성 측면에선 그렇게 좋은 방법이 아니라고 논문의 저자는 주장하고 있음. ConvNets의 scale up 방법을 다시 생각하고 연구한 결과, 균일한 scaling 방법을 제안. 만약 이미지 사이즈가 커지면 network는 receptive field와 더 많은 channel을 더 큰 이미지와 잘 맞게 하기 위해 많은 레이어를 필요로 할 것. 이전의 이론적인 연구와 empirical 연구를 통해 두 이론은 서로 연관이 있음이 밝혀졌음. scali... Read More
-
Typing 모듈 - 타입 어노테이션
모델 구성할 때, typing 으로 타입을 명시해주는 케이스가 자주 발견돼서 따로 정리함 파이썬 = 동적 프로그래밍 언어 >>> a = 1 >>> type(a) <class 'int'> 변수의 타입을 동적으로 바꿀 수 있는 파이썬은 동적 프로그래밍 언어 반면 자바는? int a = 1 // a 변수를 int형으로 지정 a = "1"; // a 변수를 문자열을 대입할 수 없으므로 컴파일 에러 한 번 변수에 타입을 지정하면 지정한 타입 외에 다른 타입은 사용할 수 없으므로 정적 프로그래밍 언어 Type Annotation num: int = 1 def ... Read More
-
LoRA peft 파인튜닝
Envs GPUs A100(40GB) * 2ea python 3.10.6 ubuntu 20.04 cuda 11.8 torch 2.0.1 peft 0.3.0 transformers 4.28.1 bitsansbytes accelerator Preset Dataset 예상되는 답변을 제대로 뱉어주는지 확인하기 위해 사전 데이터셋 작업을 아래와 같이 적용하였음 [ { "instruction":"건강을 유지하기 위한 세 가지 팁을 알려주세요.", "input":"", "output":"요호호!!" }, { "instruction":"세 가지 ... Read More
-
FLAN - Finetuned Language Models Are Zero-Shot Learners [2021]
Introduction GPT-3 같은 경우에 few-shot learning을 통해 대단한 성능을 냈으나 zero-shot learning performance는 특정 태스트에서 few-shot perofrmance보다 성능이 좋지않음. few-shot 예시없이는 사전 학습 데이터의 형식과 유사하지 않은 프롬프트에서 모델이 잘 수행하기가 더 어려움. 간단한 방법을 통해 zero-shot performance를 향상시킬 수 있음을 밝혀냈음. 즉 더 general한 모델을 만들었음을 의미함. 연구진은 직관을 효율적으로 사용했는데 NLP 태스크는 자연어 instructions을 통해 다음과 같이 묘사할 수 있음... Read More
-
Bard API 사용 이슈
Envs python 3.9.x bard-api 0.1.4 1️⃣ {'content': 'Response Error: b\')]}\\\'\\n\\n38\\n[["wrb.fr",null,null,null,null,[9]]]\\n54\\n[["di",82],["af.httprm",82,"5948628323670192505",4]]\\n25\\n[["e",4,null,null,129]]\\n\'.'} 2️⃣ Bard-API/bardapi/core.py", line 32, in _get_snim0e return re.search(r"SNlM0e":"(.*?)"", resp.text).group(1) ... Read More
-
Polyglot-ko model FT via LoRA
Envs python3.10.6 ubuntu 22.04 pytorch 2.0.0+cu118 transformers 4.28.1 peft 0.3.0 openai 0.27.4 accelerate 0.18.0 bitsandbytes 0.38.1 Mission Polyglot-ko 모델을 LoRA로 Fine-tuning finetune.py 코드 중, model 과 tokenizer load 부분을 polyglot 모델에 맞게 AutoTokenizer, AutoModelForCausalLM으로 바꿔준 상태. Prob ValueError: T... Read More
-
Polyglot-ko 모델 파인튜닝
Envs python3.10.6 ubuntu 22.04 pytorch 2.0.1+cu118 transformers 4.28.1 deepspeed 0.9.2 Prob KoAlpaca Github의 📰데이터를 사용했으나 학습이 5분만에 끝나버림.. KoAlpaca 레포에 있는 파일을 그대로 가져다가 썼기 때문에 sh 파일의 명령어 문제는 아닐거라 생각함 그럼 남은건 데이터 뿐.. train 파일의 데이터 처리 부분 코드를 뜯어보기로! Solution train.py의 데이터 불러오고 tokenize하는 부분 # Preproce... Read More
-
DeepSpeed Finetuning시 마주한 에러들
DeepSpeed를 통한 FT 구동중, 직면한 여러가지 오류에 대해 기술해놓습니다. Env ubuntu 22.04 python3.10.6 cuda 11.8 pytorch 2.0.1+cu118 transformers 4.28.1 accelerate 0.19.0 sentencepiece 0.1.99 tokenizers 0.13.3 ninja 1.11.1 deepspeed 0.9.2 1️⃣ No module named '_bz2' # Solution sudo apt-get install libbz2-dev cd Python-3.10.6 ./configure make sudo make instal... Read More
-
LoRA - Low-Rank Adaptation of Large Language Models [2021]
Introduction 많은 자연어 처리 산업에서 단일의 큰 규모의 모델과 다양한 downstream task에 사전학습된 언어모델에 의존하고 있음. Finetuning 같은 방식을 통해 모든 사전학습 모델의 파라미터를 업데이트하여 적용 시키고 있음. Finetuning의 요지는 수많은 파라미터들을 새로운 모델에 포함시켜 주는 것. 큰 모델일수록 학습시간도 방대해지고 산업에 적용시키기 매우 불편함. 많은 사람들이 일부 매개 변수만 적용하거나 새로운 task를 위해 외부 모듈을 학습하여 이를 완화하려고 했음. 이렇게되면 task-specific한 파라미터의 숫자는 적게 저장되고 불러와짐. 이러한 방법은 Finet... Read More
-
LLaMA - Open And Efficient Foundation Language Models [2023]
Introduction LLM은 엄청난 양의 텍스트 데이터를 학습시켜 performance를 향상시킵니다. 그런데 최근 연구에 의하면 Scaling-laws에 반하는 연구결과가 나타나기도 하였습니다. 근데 이런 연구결과에서 inference budget은 쏙 뺀 근거를 들이미는데 이는 서비스 할때 엄청나게 큰 결함으로 작용합니다. 이번 논문에서 학습은 그다지 빠르지 않을지라도 inference는 가장 빠른 preferred model을 소개합니다. 그리고 어느 레벨에 도달하기 위한 large model을 더 저렴하게 학습할 수 있을지라도 더이상 더 작은 모델은 궁극적으로 inference시에 더 저렴할 수 없을... Read More
-
CoT - Chain-of-Thought Prompting Elicits Reasoning in Large Language Models [2023]
Introduction 연구를 통해 2가지의 아이디어를 사용해 언어모델의 추론능력을 향상시킬 수 있는 방법을 도출해냈다. 산술적 추론 기술은 자연어 생성의 이점을 누릴 수 있다. 근거를 생성하는 데 도움이 될 수 있다. LLM은 prompting을 통해 in-context FSL의 흥미로운 전망을 제공한다. 매 다른 task를 위한 model checkpoint (FT) 대신에 단조로운 prompt를 모델에 질의할 수 있음. 놀랍게도 단순한 QA task에서 성공적적인 실험을 거뒀음. 전통적인 FSL은 추론 능력에서 형편없는 결과를 내놓았고 종종 모델 scale을 늘렸음에도 불구하고 성능이 올라... Read More
-
Prompt Engineering
Elements of Prompt Instruct : 모델에 대한 특정 task 또는 지시 Context : 외부 정보나 추가적인 문장을 포함하며 이는 모델이 더 나은 응답을 하게 만들어줌 Input Data : input이나 질의에 대한 사용자의 응답이나 질의를 찾아줌 Ouput Indicator : 형태나 포맷을 지정 Prompt를 지정할때 일반적인 팁 The Instruction Wirte, Classify, Summarize, Translate, Order등과 같은 command를 사용해 더 효과적이고 효율적으로 prompt를 구성할 수 있음 다양하고 환경에서 많은 경우의수를 놓고... Read More
-
Training for DeepSpeed and FairScale
DeepSpeed DeepSpeed는 세계에서 가장 크고 강력한 언어 모델인 MT-530B, BLOOM과 같은 것들을 활용 가능하다. 이건 쉽게 사용할 수 있는 딥러닝 최적화 소프트웨어고 이 능력은 전례없는 스케일과 속도를 구가해내고 있다. DeepSpeed를 통해 할 수 있는 사항들은 다음과 같음. 수백만개 또는 수천억개의 파라미터를 가진 dense모델이나 sparse모델을 학습하거나 추론할 수 있음 뛰어난 시스템 처리량을 달성하고 수천 개의 GPU로 효율적으로 확장 리소스 제약이 있는 GPU 시스템에서 훈련/추론 추론을 위한 전례 없는 짧은 지연 시간과 높은 처리량 달성 극한의 압축을 통... Read More
-
Terms in NLP
논문이나 각종 refernece에서 나타나는 용어들에 대해 정리한 글입니다. (자주 까먹어서..) NLI - Natural Language Inference 자연어 추론 두 개 문장(premise, hypothesis)이 참(entailment), 거짓(contradiction), 중립(netural)인지 가려내는 classification task e.g. ‘나 출근했어’ + ‘난 백수야’ = 거짓(contradiction) NLI 데이터셋 (corp. UpStage) 전제(premise)에 대한 가설(hypothesis)이 참(entailment)인지 거짓(co... Read More
-
Zero-Shot Learning in NLP
이 글은 Zero-Shot Learning in Modern NLP을 번역한 글이며 몇가지 설명을 추가하였습니다. NLP는 최근 AI분야에서 뜨거운 감자입니다. 최근 커뮤니티는 인터넷에서 사용할 수 있는 방대한 양의 라벨링되지 않은 데이터에서 학습할 수 있는 꽤 효과적인 방법을 찾기 시작했습니다. 비지도학습 모델로부터의 전의학습의 성공은 우리를 사실상 존재하는 모든 downstream 지도학습 task를 능가하게 만들어줬습니다. 우리가 새로운 모델 또는 비지도학습 객체들을 개발하는것을 이어나가는것처럼 SOTA는 사용 가능한 엄청난 양의 레이블된 데이터를 이용한 많은 task를 통해 급격하게 그 목표를 수정... Read More
-
Everything you need to know about Few-Shot Learning
이 글은 Everything you need to know about Few-Shot Learning을 번역한 글입니다. 더불어서 몇가지 내용을 추가하였습니다. Image Classification, OJ, Semantic Segmentation과 같은 CV task의 딥러닝 모델들의 성공은 많은 양의 레이블된 데이터들을 training 네트워크에 다용하는 것과 같은 이점을 낳았습니다. 이를 지도학습supervised learning이라 하죠. 비록 많은 비구조화된 데이터는 IT시대에 가용 가능하지만 annotated data는 좀 더 확장적으로 사용 가능합니다. 데이터 라벨링은 값비싼 cost의 할애 ... Read More
-
가정 설명문
가정 설명문(assert) 가정 설명문. assert는 assert는 [조건문], [메시지]와 같은 형식으로 사용 a = 3 assert a == 2 # 결과 AssertionError Traceback (most recent call last) Cell In[10], line 2 1 a = 3 ----> 2 assert a == 2 AssertionError: assert가 필요한 이유 어떤 함수는 성능을 높이기 위해 반드시 정수만을 입력받아 처리하도록 만들 수 있다. 이런 함수를 만들기 위해서는 반드시 함수에 정수만 들어오는지 확... Read More
-
Few shot learning in NLP from text classification task
문제 정의 우린 여러가지 데이터셋이나 task에서 몇가지 문제들을 마주하게된다. 실무에서나 프로젝트 진행시에 데이터셋에 대한 label이 없는 경우가 종종 있을 것이다. 또한 data science 부서에서 일하게 된다면 데이터셋의 rows가 중요하진지 덜중요한지에 대한 레이블링을 자동적으로 판별해주는 method를 원할때도 있을 것이다. 이건 단순한 이진 분류기로, 레이블링 데이터는 아마 극단적으로 길거나 매우 다루기 힘든 작업일 수도 있다. 이러한 종류의 problem들은 좀 다른 방식으로 정의될 필요가 있다. 다음은 우리가 난관에 봉착할 수 있는 scenario들을 정의한 것이다. Zero-shot... Read More
-
GPT3 - Language Models Are Few-Shot Learners [2020]
그간 task-specific한 데이터셋의 필요, 파인튜닝을 통해 task-agnostic한 접근이 불가능했다. 이러한 한계점을 꺠고자 몇가지 method를 제안한다. 첫째, 실용적인 관점에서 매번 새로운 task에 대해서 항상 언어모델은 방대한 레이블된 데이터셋이 필요한 점이 한계였다. 특정한 task에 대해서 큰 지도학습 데이터셋을 수집하기란 여간 쉬운 일이 아니고 특히 이러한 과정을 매번 새로운 task에 적용시키기란 정말 어려운 일이다. 둘째, 학습데이터의 허위 상관관계를 악용할 가능성이 모델의 표현과 학습분포의 narrow와 함꼐 근본적으로 증가한다. 이로인해 사전학습과 파인튜닝 패러다임에 문제가 발생... Read More
-
SwinTransformer - Hierarchical Vision Transformer using Shifted Windows
Swin Transformer 더 깊은 레이어들에서 이미지 패치를 결합함으로써 계층적인 피쳐맵을 쌓아갈 수 있다 Read More
-
ViT - An Image is Worth 16x16 Words Transformers for Image Recognition at Scale [2020]
의의 NLP에서 사용되는 Transformer를 Vision에 적용 기존의 제한적인 Attention Mechanism에서 벗어나, CNN구조 대부분을 Transformer로 대체 대용량 데이터셋을 Pre-train 후 Small Image 데이터셋에서 전이학습(Transfer Learning) 훨씬 적은 계산 비용으로 우수한 결과를 뽑음 단, 많은 데이터를 사전 학습해야 된다는 제한사항 존재 요약 이전 Vision Task에서 Self-Attention적용의 한계 Self-Attention을 적용하는 시도는 있었으나 비효율적... Read More
-
BERT - Pre-training of Deep Bidirectional Transformers for Language Understanding [2018]
요약 masked language model(MLM)을 사용하여 deep directional 구조를 가진다. BERT는 input token 전체와 masked token을 한번에 Transformer encoder에 넣고 원래 token을 예측하므로 deep directional함. 특정위치에 있는 단어들을 마스킹 후, 예측하도록 만듦 Pre-trained representation이 고도로 엔지니어링된 많은 작업별 아키텍쳐의 필요성을 감소시킨다는 것을 보여줌 BERT BERT의 구조는 Transformer와 유사하지만 Pre-training과 Fine-tunn... Read More
-
RNN
Abstract 기존의 Neural Network는 맥락이 전혀 고려되지 않은 단순한 구조였습니다. 이에 Hidden Layer를 도입하여 Speech Recognition, Language Modeling, Machine Translation, Image Captioning, etc.. 많은 문제를 해결했습니다. RNN은 Hidden Node에서 Activation Function을 통해 나온 결과값을 출력층 방향으로도 보내면서 동시에 다시 Hidden Node의 다음 계산의 입력으로 보내는 특징을 가집니다. $x_t$ 는 입력층의 Input Vector, $y_t$는 출력층의 출력 벡터 RNN ... Read More
-
LSTM - Long Short-Term Memory [1997]
Abstract RNN의 주요 모델 중 하나로, 장기의존성문제를 해결 가능 직전 데이터뿐만 아니라 거시적으로 과거데이터를 고려하여 미래의 데이터를 예측 가능 RNN은 한 개의 tanh레이어를 가지는 매우 간결한 구조. LSTM은 또한 RNN과 같은 chain 구조를 가지긴 하지만, 단일구조 대신에 매우 특별하게 상호작용하는 4개의 구조를 가진다 cell-state는 LSTM에서 중요 포인트로 일종의 컨베이어벨트 역할을 한다. 오직 작은 선형 상호작용을 통해 체인 전체에서 작동하며 이는 정보가 쉽게 전달되게 해준다. 덕분에 state가 꽤 오래 경과하더라도 Gradient가 비교적 전파가 잘 된다.... Read More
-
ELMO - Deep contextualized word representations [2018]
ELMO 기존 word2vec, Glove 등에 비해 context 정보를 반영하는 Pre-training 방법을 제시합니다. 여러층의 BiLSTM을 이용해 Language Model을 하며, 만들어진 hidden-state를 적절하게 조합해 새로운 word representation을 만들어냅니다. 사전 훈련된 모델을 사용한다 사전훈련된 문맥을 고려하는 문맥반영 언어모델(Contextualized Language Model) Representation은 문장 내 각 token이 전체입력 시퀀스의 함수인 representation을 할당받는 점에서 전통적인 단어임베딩과... Read More
-
OHEM - Training Region-based Object Detectors with Online Hard Example Mining [2016]
Abstract Object Detection 분야는 region-base ConvNet의 wave에 탑승해 엄청난 진보를 이루었습니다. 그러나 그것들의 학습 절차는 여전히 많은 heuristics과 연구진들이 직접 튜닝한 하이퍼파라미터를 포함하고 있습니다. 이에 본 연구진은 간단하나 놀랍게도 효율적인 region-based ConvNet 감지기인 OHEM 알고리즘을 발표합니다. 우리의 동기부여는 항상 감지 데이터셋들이 압도적으로 많은 쉬운 예의 수와 어려운 예의 적은 수였습니다. 이 어려운 예들의 자동적인 선택은 학습을 좀 더 효율적이고 효과적으로 작동되게 만들었습니다. OHEM은 간단하며 직관적인 알고리즘이며... Read More
-
Overfeat - Integrated Recognition, Localization and Detection using Convolutional Networks [2013]
본 포스팅은 Cogneethi님의 글을 번역함과 동시에 필자가 부가적으로 OverFeat에 대해 부연설명을 몇가지 더하였습니다. ConvNet’s input size Constraints 문제점 - ConvNet의 Input 사이즈 제약 Sliding Window 방법을 사용하는 것과 다른 위치에서 이미지를 잘라내는것입니다. Localization 네트워크에서 결국 너무 많은 Input들과 함께하게 될 것입니다. ConvNet이 예상하는 고정된 크기의 이미지에 대해 crop하고 resize해야만 하는 이유입니다. 이 문제를 해결하기 위해 첫번째로 ConvNet이 고정된 크기의 Input을 기대하는 이유에... Read More
-
Faster R-CNN - Towards Real-Time Object Detection with Region Proposal Networks [2015]
본 포스팅은 기본적으로 herbwood님의 글을 통해 작성되어졌으며 필자가 부가적으로 많은 다른 포스팅을 참고해 살을 덧붙였습니다. Abstract Fast R-CNN은 Region Proposal 추출(CPU 기반) > 속도 저하라는 limitation Detection을 end-to-end로 수행x Faster R-CNN은 위의 두가지를 해결한 모델 Faster R-CNN 모델 Preview 위 그림과 같이 Faster R-CNN의 RPN은 Fast R-CNN이 어디에 주목해야하는지 알려준다. RP를 추출하기 위해 사용되는 Selective Search 알고... Read More
-
Fast R-CNN [2015]
이 글은 herbwood님의 글 위주로 작성하였으며, 필자가 부가적으로 몇가지 살을 덧붙여 작성한 글입니다 Abstract Fast R-CNN은 이전 SPP Net이 가지는 한계점들을 극복하고자 하는 시도에서 출발한다. SPPNet은 기존 R-CNN이 Selective Search로 찾아낸 모든 RoI에 대해 CNN 추론을 하는 문제를 CNN 추론을 전체 이미지에 대해 1회만 수행하고, 이 Feature Map을 공유하는 방식으로 해결했다. 그러나 여전히 학습시키니 위해선 여러 단계를 거쳐야했고, FCL밖에 학습시키지 못하는 한계점이 있었다. 이에 논문의 저자는 다음과 같은 주장을 펼친다. CNN... Read More
-
R-CNN - Rich feature hierarchies for accurate object detection and semantic segmentation [2013]
Abstract Object Detector는 Object의 coordinate를 찾고(Localization), class를 분류(Classification)하는 작업을 진행한다. R-CNN은 이를 순차적으로 진행하는 2 Stage Detector 로, 딥러닝을 적용한 최초의 Object Detector다. R-CNN모델은 Object Detection 혹은 Inference(추론)시, 아래와 같은 순서에 의해 동작한다. Selective Search 알고리즘을 통해 Object가 있을 법한 위치인 Region Proposal을 2000개 추출하여, 각각을 227x227 크기로 Warp... Read More
-
mAP
mAP(mean Average Precision) AP는 Faster R-CNN, SSD와 같이 객체탐지의 정확도를 측정하는데있어서 가장 인기있는 metric이다. AP는 0과 1사이의 값을 가지는 recall을 통해 average precision값을 계산한다. 꽤나 복잡한 얘기로 들릴수 있겠지만 예시와 함께 설명하고자한다. 그전에, precision, recall, IoU에 대해 알아보자. Precision & Recall Precision은 모델의 예측이 얼마나 정확한지 측정한다. Recall은 찾은 모든 positive가 얼마나 좋은지 측정한다. 예를 들어, 암cancer에 대해 test를... Read More
-
The idea you need to understand about the Object Detection Model
Backbone Detection, Segmentation, Pose Estimation, Depth Estimation 등에서 일명 “Backbone”으로 사용된다 Backbone은 등뼈라는 뜻이다. 등뼈는 뇌와 몸의 각 부위의 신경을 이어주는 역할을 한다. 뇌를 통해 입력이 드러온다고 생각하고 팔, 다리 등이 출력이라고 생각한다면 backbone은 입력이 처음 들어와서 출력에 관련된 모듈에 처리된 입력을 보내주는 역할이라고 생각할 수 있다. 여러가지 task가 몸의 각 부분이라고 생각하면 Classification Model은 입력을 받아서 각 task에 맞는 모듈로 전달해주는 역할이다. ... Read More
-
Yolo v1 - You Only Look Once Unified, Real-Time Object Detection [2015]
YOLO paper를 단순 번역과 동시에 추가설명한 글 Introduction YOLO는 단순하다. 하나의 Convolutional Network가 여러 bounding box와 그 bounding box의 클래스 확률을 동시에 계산해준다. YOLO는 이미지 전체를 학습해 곧바로 검출 성능을 최적화한다. YOLO의 이런 통합된 모델은 기존의 Object Detection 모델에 비해 여러가지 장점이 있다. 첫째, YOLO는 매우 빠르다. regression problem으로써 detection을 구조화하였기 때문에 복잡한 pipeline이 필요없다. YOLO는 간단하게 예측을 위한 테스트 시간에서 새로운 이... Read More
-
Transformer - Attention Is All You Need [2017]
Transformer 기존의 RNN처럼 하나씩 처리하는게 아닌 한꺼번에 처리하며, 기존의 Attention 메커니즘을 사용하면서 학습과 병렬화(Parallelize)가 쉽게 되게하는 모델 출현배경 기존 Seq2Seq 모델은 Encoder-Decoder 구조로 구성되어 있었다. 여기서 Encoder는 입력 시퀀스를 하나의 벡터 표현으로 압축하고, Decoder는 이 벡터 표현을 통해 출력 시퀀스를 만들어냈다. 하지만, 이러한 구조는 Encoder가 입력 시퀀스를 하나의 벡터로 압축하는 과정에서 입력시퀀스의 정보가 일부 손실된다는 단점이 있었고, 이를 보정하기 위해 Attention이 사용되었다 Transforme... Read More