TIL

3.25 D+15

썬2 2024. 3. 25. 21:27

GPU 체크 방법

# gpu 체크해줍니다.
import torch
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")

print('Device:', device) #Device: cuda
print('Current cuda device:', torch.cuda.current_device()) #Current cuda device: 0
print('Count of using GPUs:', torch.cuda.device_count()) 
print('GPU name:', torch.cuda.get_device_name(0))
#!nvidia-smi

 

OpenAPI embedding 사용 관해

1. openapi에 text를 넣어 임베딩을 받고 싶으면, client.embeddings.create를 사용해야한다.

https://wikidocs.net/231865

 

openai.lib._old_api.APIRemovedInV1 (openai.Embedding)

## 문제 openai>=1.0.0을 설치하고 다음 코드를 실행하면, ``` q_embeddings = openai.Embedding.create(input=question,…

wikidocs.net

(api secret key를 사용하려면 신버전 패키지를 설치해야하는데, openai.Embedding.create은 openai>=1.0.0에서 지원되지 않는다. -> 신버전 패키지를 사용하고 싶으면 client.embeddings.create 로 바꾼다.

from openai import OpenAI
client = OpenAI()

def get_embedding(text, model="text-embedding-3-small"):
   text = text.replace("\n", " ")
   return client.embeddings.create(input = [text], model=model).data[0].embedding

df['ada_embedding'] = df.combined.apply(lambda x: get_embedding(x, model='text-embedding-3-small'))
df.to_csv('output/embedded_1k_reviews.csv', index=False)

https://platform.openai.com/docs/guides/embeddings/use-cases

 

2. Response 구조 보기

TypeError: 'CreateEmbeddingResponse' object is not subscriptable

 

오류 코드:

response = openai.Embedding.create(
            input=text,
            model=model,
        )

print(response["data"]) # -> response.data로 수정해야한다.

 

원인: 'client.embeddings.create'함수의 반환값이 예상하는 형태와 다를 때 발생한다.

CreateEmbeddingResponse 객체가 리스트나 딕셔너리처럼 인덱싱으로 접근할 수 없다는 오류이다.

 

+) 아래는 response 부분인데, OpenAI OpenAI Python 클라이언트 라이브러리의 최신 버전에서 반환 객체의 구조가 바뀌었을 것 같다)

{
  "object": "list",
  "data": [
    {
      "object": "embedding",
      "embedding": [
        0.0023064255,
        -0.009327292,
        .... (1536 floats total for ada-002)
        -0.0028842222,
      ],
      "index": 0
    }
  ],
  "model": "text-embedding-ada-002",
  "usage": {
    "prompt_tokens": 8,
    "total_tokens": 8
  }
}

 

https://platform.openai.com/docs/api-reference/embeddings

 

response["data"] vs response.data

response["data"]:

  • response를 딕셔너리로 취급할 때 가능하다.
  • RestfulAPI나 JSON 응답 같은 식으로 볼 수 있다.
{
  "data": {
    "title": "예제 책 제목",
    "author": "저자 이름",
    "year": 2021
  }
}
response = api_call_function()
book_title = response["data"]["title"]

 

response.data:

  • response가 객체이고, 'data'가 이 객체의 속성이다.
  • 사용자 정의 라이브러리나 프레임워크에서 볼 수 있다.
class ApiResponse:
    def __init__(self, json_payload):
        self.data = json_payload

# API에서 응답을 받는 것을 시뮬레이션
response = ApiResponse({
    "title": "예제 책 제목",
    "author": "저자 이름",
    "year": 2021
})

book_title = response.data["title"]

'TIL' 카테고리의 다른 글

3.27 D+17  (0) 2024.03.28
3.26 D+16  (0) 2024.03.26
3.24 D+14  (0) 2024.03.24
3.22 D+12  (0) 2024.03.22
3.21 D+11  (0) 2024.03.22