블로그 썸네일형 리스트형 [Faiss GPU 병렬 처리 오류] Faiss assertion 'p + size == head_' failed in void faiss::gpu::StackDeviceMemory::Stack::returnAlloc(char*, size_t, cudaStream_t) at /project/faiss/faiss/gpu/utils/StackDeviceMemory.cpp:144 상황: Faiss GPU를 활용해 텍스트 유사도 검색하는 부분이 있었는데, 이를 ThreadPoolExcutor를 활용하여 병렬 처리 구성하였을 경우 발생한 오류 Faiss assertion 'p + size == head_' failed in void faiss::gpu::StackDeviceMemory::Stack::returnAlloc(char*, size_t, cudaStream_t) at /project/faiss/faiss/gpu/utils/StackDeviceMemory.cpp:144 Faiss GPU는 Faiss CPU와 다르게, 읽기 전용 함수에서도 thread safe 하지 않기 때문에 해당 오류가 발생한다. 이러한 점은 Faiss 공식 문서에서도 나와 있다. 해당 오류에 관한 이슈,h.. 더보기 [Experiment] 온라인 통제 실험의 패턴 인과추론과 실무 빌더를 맡으면서, 온라인 통제 실험에 대한 주제를 발표하게 되었습니다.평소에 관심이 있던 분야라, 공부할 기회가 있으면 좋겠다 싶었는데 스터디를 통해 좋은 기회를 얻어 발표하게 되었습니다.아래는 프로젝트 발표에 대한 정리본입니다. 무작위 실험의 순서(0) 가설 및 실험 디자인 – Sample Size(how long?), OEC, Guardrail Metric, Data Quality etc..(1) 실험 할당 – 고유 식별자에 기반하여, 사용자를 그룹으로 나누고, 제품 변형(variant) 하나로 할당(2) 실험 실행 – 사용자의 행동 데이터를 Logging(3) 실험 로그 처리 - Log 데이터를 저장소로 업로드하여 처리 (e.g., 서버 로그와 실험 metadata 결합)(4) 실험.. 더보기 [RAG] RAG 성능 향상을 위한 Re-ranking 대학원 시절 검색 모델에 흥미를 가져 관련 연구와 공부를 진행했었는데, 당시 배운 지식이 RAG 시스템을 이해하는 데 많은 도움이 되고 있다. 예를 들어, RAG에서 주로 활용되는 임베딩 방식은 쿼리와 문서가 독립적으로 인코딩되어 문장 간의 유사도를 계산하는 Bi-Encoder이다. All-to-all interaction이 필요한 Cross-Encoder와 비교했을 때, Bi-Encoder는 텍스트를 미리 인코딩할 수 있으며, ANN Search 방식을 활용하면 Cross-Encoder 대비 빠른 연산 속도를 보장한다. 따라서 Latency가 중요한 RAG 시스템에서 Bi-Encoder 구조를 활용하는 것은 타당해 보인다. 하지만 Bi-Encoder 방식은 문서를 독립적으로 임베딩하기 때문에 텍스트 .. 더보기 [Time Series] 단순 예측 기법 및 변환, 잔차 진단 Train과 inference의 속도 그리고 학습에 필요한 데이터의 양은 모델마다 다양하다. 시계열의 패턴과 상황에 따라서 다르기 때문에 예측 기법의 로직을 이해해야 상황에 따라 활용 가능하다. 또한, 데이터에 따라서 아주 간단하지만 효과적인 예측 기법도 존재한다. 평균 기법평균 기법은 예측한 미래의 값은 과거 데이터의 평균과 같다. 과거 데이터를 y1....yT라고 쓴다면, 예측값은 다음과 같이 쓸 수 있다. 단순 기법(naive method)단순 기법은 모든 예측값을 단순하게 마지막 값으로 둔다. 주식 예측의 경우 마지막 종가를 다음날의 예측값으로 두는 것이다 (금융 도메인에서는 매우 정확하며, 많은 딥러닝 모델이 단순 기법을 이기지 못한다) 계절성 단순 기법(Seasonal naive metho.. 더보기 [Time Series] 시계열 그래프와 추세, 자기 상관, 백색 잡음 시계열 데이터에서 가장 먼저 그려야 할 것은 바로 시간 그래프(Time plot)이다.즉, 관측값을 관측 시간에 따라 직선으로 연결한 그래프이다. 위 그래프는 아래와 같은 특징을 보여준다.- 1989년은 파업으로 인하여 수송객이 없었던 기간 (3980 인덱스)- 1992년은 수송객이 감소했던 기간이며, 이코노미 좌석이 비즈니스 좌석으로 교체 되었음 (4120-4140 인덱스)- 1991년 후반에는 소송객이 크게 증가했다 (4050 이후)- 관측값이 없는 일부 기간이 있음 (4000 전) 효과적으로 미래 승객수를 예측하기 위해서는 그래프에서 나타나는 이러한 특징을 전부 모델에서 고려해야 한다. 아래는 호주 당뇨병 약 월별 매출에 대한 시계열 그래프이다. 분명하게 증가하는 추세를 확인할 수 있으며, 계절.. 더보기 [Time Series] Preface to this read-along 예측 될 수 있는 것이란? 어떤 사건이나 수량의 예측가능성은 몇 가지 요인에 의존한다.1. 영향을 주는 요인을 얼마나 잘 이해할 수 있는지2. 사용할 수 있는 데이터가 얼마나 많은지3. 예측이 우리가 예측하려는 것에 영향을 줄 수 있는 여부 예를 들어, 전기 수요 예측의 경우 전기 수요가 기온에 영향을 받는 것을 알고 있으며, 날씨에 대한 충분한 데이터가 있기 때문에 정확하게 예측할 수 있다. 하지만 환율 예측의 경우, 데이터는 많지만 환율에 영향을 주는 요인을 잘 모르고, 전 날의 환율은 다음날의 환율에 영향을 미치기 때문에(efficient market hypothesis), 동전 던지기와 비슷한 예측을 할 수 있다.따라서, 주가 예측(Stock Forcasting)과 같은 작업은 전날의 주가를 다음.. 더보기 [K8s] Pod & ReplicaSet & Deployment PodPod은 쿠버네티스에서 관리하는 가장 작은 배포 단위이다. Docker와 비교해보면, Docker는 컨테이너를 만들지만 쿠버네티스에서는 Pod을 바탕으로 컨테이너를 관리한다. 또한, Pod에는 여러개의 컨테이너를 포함할 수 있다. 일반적으로 쿠버네티스는 YAML 설정파일을 만들어서, 작업을 하기 때문에 이를 통해 Pod을 만들어 보자.아래 조건의 Pod을 만들자.apiVersion: v1kind: Podmetadata: name: mongodb labels: app: mongospec: containers: - name: mongodb image: mongo:4 해당 Pod을 생성하고, 조회 해보자.# Pod 생성kubectl apply -f echo-pod.yml# Pod.. 더보기 [YAML] 기본 문법 들여쓰기(indent)들여쓰기는 기본적으로 2칸 또는 4칸이다. 2칸을 일반적으로 사용한다.person: name: SEONGSU KIM job: Data Scientist skills: - docker 데이터 정의 (Map)데이터는 Key: value 형식으로 정의한다. 여기서 중요한 것은 key: 다음에 한 칸을 띄워줘야 한다는 것이다.person: name: Chungsub Kim job: Developer skills: - docker - kubernetes 아래 Skills에 "-"이 배열로 표시되고 있다. 이는 json 구조에서 , "Skills" :["docker", "kubernetes"]에 해당하는 구조이다.개인적으로 YAML 구조가 json보다 직관적인것 같.. 더보기 이전 1 2 3 4 ··· 6 다음