no image
[Hugging Face] Dataset의 map 함수 사용법
이번에는 Hugging Face의 datasets.Dataset의 map 함수에 대해서 설명해 드리겠습니다. 이 함수는 Dataset의 요소들에 함수를 적용하기 위해서 사용하는 함수입니다. 이 함수를 통해 data들을 전처리하여 바로 사용하거나 DataLoader에 넘겨서 사용하기도 합니다. 함수에 대해 정의 및 매개변수에 대해 정의하고 사용하는 방법에 대해 소개해드리겠습니다. 정의 from datasets import Dataset Dataset.map(function= None, batched=False, batch_size= 1000, drop_last_batch= False, remove_columns= None, num_proc= None) 자주 사용하는 매개변수만 적어보았습니다. functio..
2024.01.14
no image
[Pytorch Lightning] 파이토치 라이트닝 기초(LightningModule, Trainer)
요즘 딥러닝과 관련해서 파이토치 라이트닝을 다룰일이 많은데 생각보다 한국어로 되어있는 Document, Blog가 너무 적어서 직접 적어보려고 한다. 생각보다 글솜씨가 좋지 않더라도 많은 도움이 되었으면 한다. 파이토치를 사용하는 이유는? 다음과 같은 딥러닝 파이프라인에서 파이토치 라이트닝은 다음과 같은 추상화 계층을 이용해 딥러닝 파이프라인 설계를 매우 간단하게 만들어주기 때문에 사용한다. LightningModule은 모델 구조, 훈련 방법, 평가 방법, 테스트 방법, 추론 방법, 옵티마이저 등을 정의하는 클래스이다. Trainer은 LightningModule에서 정의한 모델을 훈련 및 평가하는 방법을 추상화한 클래스이다. 간단하게 LightningModule에는 무엇이 있으며 Trainer에는 무..
2024.01.13
no image
[Python] Jupyter Notebook 가상환경 커널 추가 및 삭제
이번에는 Jupyter Notebook에 가상환경을 추가하고 삭제하는 방법에 대해 소개해드리겠습니다. Jupyter Notebook에서 다음과 같이 Terminal창에 접속합니다. 가상환경 생성 python -m venv myvenv python3 또는 python을 이용하며 myvenv(가상환경)을 생성합니다. 가상환경 활성화 source myvenv/bin/activate Linux환경에서 다음과 같은 명령어를 통해 myvenv(가상환경)을 실행합니다. ipykernel 설치 pip install ipykernel 커널을 추가하기 위해 ipykernel을 설치합니다. 커널 추가하기 python -m ipykernel install --user --name=myvenv myvenv를 ipykernel을..
2024.01.11
no image
[Hugging Face] evaluate.evaluator을 이용하여 모델 평가하기
이번에는 Hugging Face에서 Evaluate 라이브러리 사용하여 모델의 Acc, F1, Rouge 등의 metric을 사용하는 방법에 대해 소개해드리겠습니다. Evaluate 라이브러리란? 기계 학습(Machine Learning) 및 데이터셋(Dataset)을 쉽게 평가하기 위한 라이브러리 입니다. 간단한 코드로 다양한 작업(NLP Task, Computer Vision 등)을 수십 가지 평가 방법을 적용할수 있습니다. 전체적인 구조는 다음과 같습니다. Pipeline, Metric과 Dataset을 Evaluator에 넣어서 결과를 도출합니다. 이어서 사용하는 방법에 대해 설명해드리겠습니다. *코드 환경은 기본적으로 Jupyter Noteboo에서 실행합니다! evaluate 설치 pip !p..
2024.01.04
no image
[Hugging face] datasets 라이브러리로 dataset과 metric 불러오기
이번 포스팅에서는 Huggingface hub에서 제공하는 dataset의 목록과 dataset을 불러오는 방법에 대해 알려드리겠습니다. * 모든 코드는 Jupyter Notebook 환경에서 실행했습니다. datasets 라이브러리 설치 # Hugging face에서 제공하는 datasets 라이브러리 설치 !pip install datasets dataset 불러오기 datasets 개수 확인(24.01.03 기준) import datasets print(len(datasets.list_datasets())) # 91305 datasets load 방법(emotions) from datasets import load_dataset emotions = load_dataset("emotion") 현재 e..
2024.01.03
no image
[Python] *args 와 **kwargs의 차이
이번 포스팅은 함수의 매개변수에서 입력받는 *args와 **kwargs에 대해 알아보겠습니다. 아마 인공지능이나 여러 코드를 보면 다음과 같은 코드를 마주칠 일이 있을 겁니다. def args_and_kwargs(*args, **kwargs): 다음과 같이 *와 **로 인자를 받는 함수를 보셨을 겁니다. 이 함수의 차이에 대해서 설명해 드리겠습니다. *args 가변 위치 인자(Variable Positional Arguments) * args는 함수에 가변적인 개수의 비키워드 인자를 전달할 때 사용 인자들을 튜플의 형태로 입력을 받음 함수를 정의하면서 비키워드 인자의 수를 모를 때 사용 위의 말이 어렵다면 예시를 통해 설명해 드리겠습니다. def print_args(*args): print(type(ar..
2024.01.03
no image
[PyTorch] RuntimeError: The NVIDIA driver on your system is too old. 오류 해결법
오늘은 GPU 버전 오류에 대해 포스팅을 하려고 합니다. 최근에 GPU를 이용해서 인공지능 모델을 학습시키려고 하는데 다음과 같은 오류가 발생했습니다. RuntimeError: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with you..
2023.12.31
no image
[OpenAI] Playground 사용법 (GPT로 Prompt Engineering 해보기)
이번에는 GPT를 이용해서 Prompt Engineering 하기 위해 OpenAI의 Playground 도구를 사용하는 방법에 대해 소개하려고 합니다. 플랫폼이 자주 바뀌어서 수정 날짜를 참고해 주시면 감사하겠습니다. ( 최종 수정 날짜 : 23. 12. 30) 일단, 여기에 접속을 하셔서 로그인을 합니다. Playground에서 Chat 모드를 접속합니다. ( 빨간 네모 클릭 후, 파란 네모를 클릭하여 Chat를 선택합니다. OpenAI의 Playground란? GPT-4 및 GPT-3.5와 같은 OpenAI의 텍스트 생성 모델에 대해 프롬프트를 이용하여 다양한 작업을 할 수 있도록 도구를 제공해주는 곳(놀이터)입니다. 프롬프트 엔지니어링에 대해 실험하여 LLM(Large-Language-Model)..
2023.12.30
no image
[Python] 문자열 템플릿(string Template)
파이썬에서 유용한 string의 Template 라이브러리에 대해 소개하고자 합니다. 파이썬을 조금이라도 다뤄보신 분이라면 문자열 포매팅이 얼마나 자주 사용되는지 아실 텐데요, string.Template는 이러한 문자열 포매팅을 더 안전하고 명확하게 해주는 훌륭한 도구입니다. 그중에서 함수 subtitute에 대해 소개해드리려고 합니다. 선언 방법 from string import Template template = Template(str) # Template에 추가할 문자열 대체할 문자열 표시하는 방법 첫번째 방법 : $ 와 공백을 사용하여 표시 from string import Template text = "Hello, my name is $name and my hobby is $hobby" # n..
2023.12.30
no image
[Numpy] 차원 축소 및 확장 (np.expand_dims 와 np.sqeeze)
두 함수는 주로 딥러닝에서 다차원 배열을 다룰 때 사용되, 텐서의 차원을 축소하거나 확대할 때 자주 사용합니다. np.expnad_dims import numpy as np np.expand_dims(data, axis) data : 차원을 추가할 array 또는 tensor입니다. axis : 확장할 축(차원)의 위치. 값은 정수, 리스트 또는 튜플의 형태로 입력할 수 있습니다. 예시1) axis에 정수를 넣어 2차원 배열을 3차원 배열로 확장하는 경우입니다. >>> import numpy as np >>> data = np.arange(12).reshape(3,4) >>> data array([[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]]) >>> data1 = ..
2023.12.28
728x90

이번에는 Hugging Face의 datasets.Dataset의 map 함수에 대해서 설명해 드리겠습니다. 이 함수는 Dataset의 요소들에 함수를 적용하기 위해서 사용하는 함수입니다. 이 함수를 통해 data들을 전처리하여 바로 사용하거나 DataLoader에 넘겨서 사용하기도 합니다. 함수에 대해 정의 및 매개변수에 대해 정의하고 사용하는 방법에 대해 소개해드리겠습니다.

 

정의


from datasets import Dataset

Dataset.map(function= None,
	    batched=False,
            batch_size= 1000,   
            drop_last_batch= False, 
            remove_columns= None,
            num_proc= None)

자주 사용하는 매개변수만 적어보았습니다.

  • function = 매핑할 함수
  • remove_column = 삭제할 column의 리스트입니다.
  • num_proc : 매핑시 사용되는 최대 프로세스의 수입니다.

 

사용방법


토크나이저를 정의해서 입력을 토큰화하여 전처리하는 과정

from datasets import load_dataset, Dataset

# 데이터셋 정의
dataset = load_dataset("nsmc")
dataset

실행결과

함수 정의

from transformers import AutoTokenizer

# 토크나이저 정의
tokenizer = AutoTokenizer.from_pretrained("monologg/kobert")

# 매핑할 함수 정의: document를 Tokenize
def process(example):
    processed = {}
    input_data = f'{example["document"]}'
    processed['input_ids'] = tokenizer(input_data,padding="max_length", max_length=256,truncation=True)
    return processed

map 함수 적용

# process 함수로 dataset을 처리, 8개 프로세스 사용, 'id'와 'document' column 삭제
dataset = dataset.map(process, num_proc=8, remove_columns=['id','document'])
dataset

실행 결과 : id와 documnet 삭제 및 input_ids 생성

 

익명함수를 이용한 간단한 매핑방법


from transformers import AutoTokenizer
from datasets import load_dataset

# tokenizer 정의
tokenizer = AutoTokenizer.from_pretrained("monologg/kobert")

# dataset 로드
datasets = load_dataset("nsmc")

# dataset map함수를 lambda함수를 적용
datasets.map(lambda example: tokenizer(example["document"]), num_proc=8, remove_columns=['id','document'])

실행결과

다음과 같이 적용할 수 있음

 

 

num_proc에 따른 실행시간 차이


1. num_proc = 1 

약 56초

2. num_proc = 4

약 17초

3. num_proc = 8

약 9초

4. num_proc = 16

약 6초

 

프로세스의 수가 클수록 빨라지지만 메모리 할당까지 생각하면 8이 적당한 것 같습니다. 

 

읽어주셔서 감사합니다. 오류가 있으면 알려주세요 :)

728x90
728x90

 

요즘 딥러닝과 관련해서 파이토치 라이트닝을 다룰일이 많은데 생각보다 한국어로 되어있는 Document, Blog가 너무 적어서 직접 적어보려고 한다. 생각보다 글솜씨가 좋지 않더라도 많은 도움이 되었으면 한다.

 

파이토치를 사용하는 이유는?


딥러닝 파이프라인

다음과 같은 딥러닝 파이프라인에서 파이토치 라이트닝은 다음과 같은 추상화 계층을 이용해 딥러닝 파이프라인 설계를 매우 간단하게 만들어주기 때문에 사용한다.

  • LightningModule은 모델 구조, 훈련 방법, 평가 방법, 테스트 방법, 추론 방법, 옵티마이저 등을 정의하는 클래스이다.
  • Trainer은 LightningModule에서 정의한 모델을 훈련 및 평가하는 방법을 추상화한 클래스이다.

간단하게 LightningModule에는 무엇이 있으며 Trainer에는 무엇이 있는지 간단하게 살펴보고 포스팅을 마치려고 합니다.

 

LightningModule


필수적으로 사용하는 코드 위주로 적었습니다.

__init__ 초기화를 정의
forward( ) 데이터를 모델에 넣어서 실행
training_step( ) 모델 훈련시 사용하는 코드
validation_step( ) 모델 평가시 사용하는 코드
test_step( ) 모델 테스트시 사용하는 코드
predict_step( ) 모델 예측시 사용하는 코드
configure_optimizers( ) optimizer, learning rate 스케줄러를 선택합니다. 
GAN의 경우 여러가지 optimizer를 가질 수 있습니다.

 

Trainer


Trainer에 대해 선언하는 방법과 GPU를 사용하는 방법에 대해서 설명해드리겠습니다.

모델 훈련

model = MyLightningModule()

trainer = Trainer()
# 훈련만 하는 경우
trainer.fit(model, train_dataloader)

# 훈련과 평가를 하는 경우
trainer.fit(model, train_dataloader, val_dataloader)

 

모델 평가

model = MyLightningModule()

trainer = Trainer()

trainer.validate(model=model, dataloaders=val_dataloaders)

 

모델  GPU 사용

# CPU 사용
trainer = Trainer(accelerator="cpu")

# Training with GPU Accelerator using 2 GPUs
# 훈련시 GPU 2개를 사용
trainer = Trainer(devices=2, accelerator="gpu")

# Training with TPU Accelerator using 8 tpu cores
# 훈련시 8개의 TPU 사용
trainer = Trainer(devices=8, accelerator="tpu")

# Training with GPU Accelerator using the DistributedDataParallel strategy
# 4개의 GPU를 사용하며, DDP 방식 사용
trainer = Trainer(devices=4, accelerator="gpu", strategy="ddp")

 

다음에는 파이토치 라이트닝을 이용해서 간단한 인공지능 모델을 만들어보겠습니다.

728x90
728x90

이번에는 Jupyter Notebook에 가상환경을 추가하고 삭제하는 방법에 대해 소개해드리겠습니다.

 

Jupyter Notebook에서 다음과 같이 Terminal창에 접속합니다.

 

가상환경 생성


python -m venv myvenv

python3 또는 python을 이용하며 myvenv(가상환경)을 생성합니다.

 

가상환경 활성화


source myvenv/bin/activate

Linux환경에서 다음과 같은 명령어를 통해 myvenv(가상환경)을 실행합니다.

 

ipykernel 설치


pip install ipykernel

커널을 추가하기 위해 ipykernel을 설치합니다.

 

커널 추가하기


python -m ipykernel install --user --name=myvenv

myvenv를 ipykernel을 통해 설치합니다.

명령어를 통해 myvenv를 설치한 모습입니다.

새로고침을 해야 커널이 추가됩니다.

 

 

커널 리스트확인하기


다음 명령어를 통해 현재 커널의 목록을 확인할 수 있습니다.

jupyter kernelspec list

커널 목록

 

커널 삭제하기


jupyter kernelspec uninstall myvenv

다음 명령어를 통해 jupyter notebook 커널을 삭제합니다.

728x90
728x90

이번에는 Hugging Face에서 Evaluate 라이브러리 사용하여 모델의 Acc, F1, Rouge 등의 metric을 사용하는 방법에 대해 소개해드리겠습니다.

Evaluate 라이브러리란?

기계 학습(Machine Learning) 및 데이터셋(Dataset)을 쉽게 평가하기 위한 라이브러리 입니다. 간단한 코드로 다양한 작업(NLP Task, Computer Vision 등)을 수십 가지 평가 방법을 적용할수 있습니다.

전체적인 구조는 다음과 같습니다.

Pipeline, Metric과 Dataset을 Evaluator에 넣어서 결과를 도출합니다.

 

이어서 사용하는 방법에 대해 설명해드리겠습니다.

*코드 환경은 기본적으로 Jupyter Noteboo에서 실행합니다!

 

evaluate 설치


pip

!pip install evaluate

 

필요한 모듈 선언


from transformers import pipeline
from datasets import load_dataset
from evaluate import evaluator
import evaluate

각각 필요한 모듈을 선언합니다.

 

pipeline 구축


pipe = pipeline("text-classification", model="lvwerra/distilbert-imdb", device=0 if torch.cuda.is_available() else "cpu")

1. 텍스트 분류 선언

2. distilbert 기반이며 imdb로 fine-tunnig된 모델 선언

3. gpu가 없다면 cpu 사용

 

dataset 로드


# imdb dataset 중 test를 가져오며, 랜덤하게 1000개를 선택
data = load_dataset("imdb", split="test").shuffle().select(range(1000))

imdb 데이터셋을 로드합니다. 그리고 섞고  1000개를 랜덤으로 가져옵니다.

 

metric 로드


metric = evaluate.load("accuracy")

평가에 사용할 것은 accuracy (정확도) 입니다.

 

evaluator 선언 및 평가


# Task 선언
task_evaluator = evaluator("text-classification")

# model, data 를 이용하여 metric 반환
# label이 숫자가 아닌 str로 구성된다면 0과 1로 각각 매핑
# strategy는 'bootstrap'과 'simple'로 구성되어있습니다.
# n_resamples는 기본적으로 9999 입니다.

results = task_evaluator.compute(model_or_pipeline=pipe, data=data, metric=metric,
                       label_mapping={"NEGATIVE": 0, "POSITIVE": 1},
                       strategy="bootstrap", n_resamples = 200)
# 결과 출력
print(results)
{'accuracy': 
    {
    'confidence_interval': (0.905, 0.939), 
    'standard_error': 0.008500206951033177, 
    'score': 0.923
    }
}

 

파이프라인  : distilbert를 imdb로 미세 조정한 모델을 바탕으로 text-classification 진행

데이터셋 : imdb

metric : Accuracy

-> imdb로 미세조정된 모델이 imdb를 얼마나 잘 맞추는지 정확도를 산출

감사합니다.

 

728x90
728x90

이번 포스팅에서는 Huggingface hub에서 제공하는 dataset의 목록과 dataset을 불러오는 방법에 대해 알려드리겠습니다.

* 모든 코드는 Jupyter Notebook 환경에서 실행했습니다.

 

datasets 라이브러리 설치

# Hugging face에서 제공하는 datasets 라이브러리 설치
!pip install datasets

 

dataset 불러오기


datasets 개수 확인(24.01.03 기준)

import datasets

print(len(datasets.list_datasets()))
# 91305

 

datasets load 방법(emotions)

from datasets import load_dataset

emotions = load_dataset("emotion")

데이터 다운로드와 dataset 정보

현재 emotions 안에 train, validation, test 데이터가 각각 16000, 2000, 2000개가 있는 것을 확인할 수 있습니다. 또한, 요소로는 text와 label이 있는 것을 볼 수 있습니다.

그림으로 표현하면 다음과 같습니다. 

emotions 내부에 train(16000), validation(2000), test(2000)개의 데이터가 존재

train 내부는 그림과 같습니다.

train 내부에 dict로 되어있는 text와 label로 이루어진 데이터가 16,000개가 있음

 

 

metrics 불러오기


metrics :자연어 처리에서 모델의 성능을 평가하기 위해 사용되는 수치. 여러 종류의 metrics가 존재하며 각각은 특정 목적에 맞게 설계

  • BLEU Score : 모델의 번역 품질을 평가
  • ROUGE Score : 모델의 요약 성능을 평가

위와 같은 다양한 metrics가 있으며 불러오는 방법에 대해 설명하겠습니다.

 

metrics의 목록을 확인

import datasets

print(datasets.list_metrics())

# Output
['accuracy',
 'bertscore',
 'bleu',
 'bleurt',
 'brier_score',
 'cer',
...
]

 

metics 중 가장 간단한 accuracy를 사용

from datasets import load_metric

# Accuracy 메트릭 로드
accuracy_metric = load_metric('accuracy')

# 예측된 값과 참조 값
predictions = [0, 1, 1, 0, 1]  # 예측된 레이블 예시
references = [0, 1, 0, 0, 1]  # 실제 레이블 예시

# Accuracy 스코어 계산
results = accuracy_metric.compute(predictions=predictions, references=references)
print(results["accuracy"])

# Output
# 0.8

 

metrics 중 bleu사용

from datasets import load_metric

# BLEU 메트릭 로드
bleu_metric = load_metric('bleu')

# 예측된 번역과 참조 번역
predictions = [["the", "cat", "is", "on", "the", "mat"]]
references = [[["the", "cat", "is", "on", "the", "mat"]]]

# BLEU 스코어 계산
results = bleu_metric.compute(predictions=predictions, references=references)
print(results["bleu"])

# Output : 1.0

 

Hugging face의 dataset과 metrics의 목록과 사용법에 대해 알아봤습니다. 다음엔 모델에 사용하는 방법에 대해 알아보겠습니다.

 

출처 : https://huggingface.co/docs/datasets/index

728x90
728x90

이번 포스팅은 함수의 매개변수에서 입력받는 *args와 **kwargs에 대해 알아보겠습니다. 아마 인공지능이나 여러 코드를 보면 다음과 같은 코드를 마주칠 일이 있을 겁니다.

def args_and_kwargs(*args, **kwargs):

다음과 같이 *와 **로 인자를 받는 함수를 보셨을 겁니다.

이 함수의 차이에 대해서 설명해 드리겠습니다.

 

*args 가변 위치 인자(Variable Positional Arguments)


  •  * args는 함수에 가변적인 개수의 비키워드 인자를 전달할 때 사용
  • 인자들을 튜플의 형태로 입력을 받음
  • 함수를 정의하면서 비키워드 인자의 수를 모를 때 사용

위의 말이 어렵다면 예시를 통해 설명해 드리겠습니다.

def print_args(*args):
    print(type(args))
    print(args)
    for arg in args:
        print(arg)

print_args('hello', 'world', 'I', 'am', 'here')

# Output
# <class 'tuple'>
# ('hello', 'world', 'I', 'am', 'here')
# hello
# world
# I
# am
# here

함수를 사용할 때 Hello, world, I, am, here이 tuple로 묶여서 args에 입력되는 것을 볼 수 있습니다.

출력이 tuple형태로 묶여서 출력되는 것을 볼 수 있습니다.(위치 순서 중요!)

 

**kwargs 가변 키워드 인자(Variable Keyword Arguments)


  • **kwargs는 함수에 가변적인 개수의 키워드 인자를 전달할 때 사용
  • 인자들을 딕셔너리 형태로 받음
  • 함수를 정의할 때 어떤 키워드 인자가 전달될지 모를 때 사용

이것도 마찬가지로 예시를 통해 설명해 드리겠습니다.

def print_kwargs(**kwargs):
    print(type(kwargs))
    print(kwargs)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_kwargs(name='John', age=25, job='Developer')

# Output
# <class 'dict'>
# {'name': 'John', 'age': 25, 'job': 'Developer'}
# name: John
# age: 25
# job: Developer

함수를 사용할 때 name='John', age=25, job='Developer'이 dictionary로 묶여서 kwargs에 입력되는 것을 볼 수 있습니다.

출력이 dictionary형태로 묶여서 출력되는 것을 볼 수 있습니다.

 

*args**kwargs 함께 사용하기


함수에서 위치 인자와 키워드 인자를 동시에 가변적으로 받고 싶을 때 함께 사용할 수 있습니다.

def print_args_and_kwargs(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(f"{key}: {value}")

print_args_and_kwargs('I', 'like', 'Python', language='Python', version=3.8)

# Output
# I
# like
# Python
# language: Python
# version: 3.8

이러한 방식으로, *args**kwargs는 파이썬에서 함수의 유연성을 크게 높여줍니다. 

특히 인공지능에서 여러 개의 인자들을 받을 때 자주 사용하므로 알아두어야 하는 기능 중 하나입니다. 

그림으로 표현하면 다음과 같습니다.

 

728x90
728x90

오늘은 GPU 버전 오류에 대해 포스팅을 하려고 합니다.

최근에 GPU를 이용해서 인공지능 모델을 학습시키려고 하는데 다음과 같은 오류가 발생했습니다.

 
RuntimeError: The NVIDIA driver on your system is too old (found version 11040). Please update your GPU driver by downloading and installing a new version from the URL: http://www.nvidia.com/Download/index.aspx Alternatively, go to: https://pytorch.org to install a PyTorch version that has been compiled with your version of the CUDA driver.
 
 
왜 발생하는가?

NVIDIA driver의 버전이 오래됨

버전확인하는 방법

$ nvidia-smi

위의 코드를 입력하면 우상단에 CUDA Version 확인

다음과 같이 CUDA Version을 확인할 수 있습니다.

해결하는 방법은?

해결하는 방법은 2가지입니다.

  • NVIDIA driver 최신 버전 설치
  • PyTorch 최신 버전 또는 GPU에 맞는 버전 설치

그 중에서 PyTorch 설치 방법에 대해 소개해드리려고 합니다.

첫 번째  PyTorch 홈페이지에 접속한다.

https://pytorch.org/get-started/previous-versions/

 

Previous PyTorch Versions

Installing previous versions of PyTorch

pytorch.org

 

두 번째, 자신의 OS와 이전 CUDA버전보다 최신 버전의 CUDA를 찾습니다.

저는 Linux를 사용하며 이전 버전이 11.4였기 때문에 11.7 버전을 설치할겁니다.

$ pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117

 

 

3. 코드 입력

사진과 같이 Jupyter Notebook에 실행하고 커널을 재시작합니다.

 

그럼 정상적으로 오류를 출력하지 않고 작동합니다.

728x90
728x90

이번에는 GPT를 이용해서 Prompt Engineering 하기 위해 OpenAI의 Playground 도구를 사용하는 방법에 대해 소개하려고 합니다. 플랫폼이 자주 바뀌어서 수정 날짜를 참고해 주시면 감사하겠습니다. ( 최종 수정 날짜 : 23. 12. 30)

일단, 여기에 접속을 하셔서 로그인을 합니다.

Playground에서 Chat 모드를 접속합니다. ( 빨간 네모 클릭 후, 파란 네모를 클릭하여 Chat를 선택합니다.

 

OpenAI의 Playground란?


GPT-4 및 GPT-3.5와 같은 OpenAI의 텍스트 생성 모델에 대해 프롬프트를 이용하여 다양한 작업을 할 수 있도록 도구를 제공해주는 곳(놀이터)입니다. 프롬프트 엔지니어링에 대해 실험하여 LLM(Large-Language-Model)에서 더 나은 결과를 얻기 위한 방법을 얻을 수 있도록 시험할 수 있는 곳입니다.

OpenAI 가입방법 및 결제방법

 여기를 참고하세요⭐

 

 

OpenAI Playground, Chat mode 사용법


빨간색(Prompt)을 먼저 설명하고 검정색(Hyperparamter)을 이후에 설명하겠습니다.

 

Prompt


  • SYSTEM : 사용자의 입력 전에 추가할 문구
  • USER : 사용자의 입력 (예시 : ChatGPT 채팅 창)
  • ASSITATN : 모델의 출력 (예시 : ChatGPT 출력)
  • Add message : 채팅창 추가( USER, ASSITANT 선택가능)
  • Submit : SYSTEM + USER 내용을 입력

 

USER 사용 예시


USER 

K-pop 음악 하나만 추천해줘

USER의 입력에 대해 2번의 Submit 버튼을 눌렀습니다.

ASSISTANT(GPT) 

저는 "BTS - Dynamite"를 추천드립니다. 이 노래는 활기 넘치는 비트와
긍정적인 가사로 전 세계적으로 사랑받았으며, 2020년 빌보드
핫 100 차트에서 1위를 차지한 대표적인 K-pop 노래입니다.
ASSISTANT(GPT) 

물론, 저는 AI 모델이므로 음악을 청취하거나 감정을 느끼는 능력은 
없지만, 많은 사람들이 사랑하는 K-pop 노래 중 하나인 "BTS - 
Dynamite"를 추천해드립니다. 이 곡은 활기차고 긍정적인 메시지
를 담고 있어, 듣는 이로 하여금 기분을 좋게 만들어 줄 수 있을 것입
니다. 기대해주셔서 감사합니다!

각각의 출력을 볼 수 있다.

SYSTEM 사용 예시


 

SYSTEM 

출력 형식을 위와 같은 방식으로 출력 해줘
제목 : 가수
USER 

K-pop 음악 하나만 추천해줘

GPT에게 SYSTEM + USER의 내용을 입력합니다.

ASSISTANT 

가수 : 방탄소년단 (BTS)
제목 : Dynamite

 

ASSISTANT 

가수 : 블랙핑크 (BLACKPINK)
제목 : Kill This Love

위의 입력을 바탕으로 ASSISTANT는 SYSTEM에서 부탁한대로 출력하는 것을 볼 수 있습니다.

 

Hyperparameter


 이 중에서 자주 사용하는 옵션에 대해서 설명해드리겠습니다.

 

Model


Chat 모드에서 사용할 GPT 모델을 선택합니다.

 

Temerature


모델이 다음 토큰 후보 중에서 출력한 토큰을 선택하는 방식입니다.

  • 값이 높을수록 더 창의적인(무작위적이고 환각이 많은) 답변
  • 값이 낮을수록 일관된 답변을 함(더 높은 확률의 토큰에 집중시켜 결정론적으로 만듦)
  • 보통 값은 0 ~ 1, GPT의 경우 0 ~ 2 사이의 값

 

Maximum length




모델의 최대 출력 길이를 설정하는 parameter입니다.

이 옵션을 통해 출력의 길이를 설정하여 API 호출의 수를 줄여 가격을 아낄 수 있습니다.

728x90

'AI API > OpenAI' 카테고리의 다른 글

[OpenAI] platform.openai.com 가입 및 카드 등록하는 방법  (0) 2023.12.25
728x90

파이썬에서 유용한 string의 Template 라이브러리에 대해 소개하고자 합니다. 파이썬을 조금이라도 다뤄보신 분이라면 문자열 포매팅이 얼마나 자주 사용되는지 아실 텐데요, string.Template는 이러한 문자열 포매팅을 더 안전하고 명확하게 해주는 훌륭한 도구입니다. 그중에서 함수 subtitute에 대해 소개해드리려고 합니다. 

선언 방법


from string import Template
template = Template(str) # Template에 추가할 문자열

 

대체할 문자열 표시하는 방법


첫번째 방법 : $ 와 공백을 사용하여 표시

from string import Template

text = "Hello, my name is $name and my hobby is $hobby"
# name 과 hobby를 대체할 변수로 만듦
# $ 와 공백을 이용하여 변수 생성

 

두번째 방법 : $ 와 { }를 사용하여 표시

두 번째 방법을 사용하는 이유는 변수 뒤에 공백 대신 문자가 올 때 변수명으로 선언되지 않기 위해 사용

from string import Template

text = "Hello, my name is ${name}, my hobby is ${hobby}"
# name 과 hobby를 대체할 변수로 만듦
# $ 와 괄호를 이용해 변수를 생성

 

 

Template.substitute


Template.substitute(dict or key)

 

딕셔너리 대신 매개변수를 각각 입력하는 경우

from string import Template

text = "Hello, my name is ${name}, my hobby is ${hobby}"

template = Template(text)

print(template.substitute(name="gil", hobby="coding"))

# Hello, my name is gil, my hobby is coding

string.Template$를 사용하여 변수를 표시합니다. 이는 문자열 내에서 동적인 부분을 명확하게 표시하고, 나중에 이 부분들을 다른 값으로 대체할 수 있게 해 줍니다.

 

딕셔너리로 입력하는 경우

from string import Template

text = "Hello, my name is ${name}, my hobby is ${hobby}"

template = Template(text)

tmp = dict(name="gil", hobby="coding") # {name="gil", hobby="coding"}

print(template.substitute(tmp))

# Hello, my name is gil, my hobby is coding

딕셔너리를 이용해 간단하게 매개변수를 전달할 수 있습니다.

 

매개변수가 누락된 경우

from string import Template

text = "Hello, my name is ${name}, my hobby is ${hobby}"

template = Template(text)

# hobby 매개변수를 입력하지 않은 경우
print(template.substitute(name="gil"))

# KeyError: 'hobby'

hobby라는 Key가 없어서 KeyError를 발생시킨다.

 

728x90
728x90

두 함수는 주로 딥러닝에서 다차원 배열을 다룰 때 사용되, 텐서의 차원을 축소하거나 확대할 때 자주 사용합니다.

 

np.expnad_dims


import numpy as np
np.expand_dims(data, axis)

 

data : 차원을 추가할 array 또는 tensor입니다.

axis : 확장할 축(차원)의 위치. 값은 정수, 리스트 또는 튜플의 형태로 입력할 수 있습니다.

예시1) axis에 정수를 넣어 2차원 배열을 3차원 배열로 확장하는 경우입니다.

>>> import numpy as np
>>> data = np.arange(12).reshape(3,4)
>>> data
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
       
>>> data1 = np.expand_dims(data, axis=1)
>>> data1.shape
(3, 1, 4)

 

예시2) axis에 리스트를 넣어 2차원 배열을 4차원 배열로 확장하는 경우입니다.

>>> data2 = np.expand_dims(data, axis = [0,2])
>>> data2.shape
(1, 3, 1, 4)

 

np.squeeze


import numpy as np
np.squeeze(data, axis=None)

data : 차원을 축소할 array 또는 tensor입니다.

axis : 축소할 축(차원)의 위치. 값을 정수를 넣어서 특정 차원을 축소하거나 생략하여 차원의 크기가 1인 모든 차원이 제거됩니다.

 

예시1) axis에 정수를 넣은 경우

>>> data = np.arange(9).reshape(1,3,1,3)
>>> data.shape
(1, 3, 1, 3)

>>> data1 = np.squeeze(data, axis=0)
>>> data1.shape
(3, 1, 3)

 

예시2) axis값을 None으로 한 경우

>>> data.shape
(1, 3, 1, 3)


>>> data2 = np.squeeze(data)
>>> data2.shape
(3, 3)

 

728x90