오류 해결 과정 15

Poetry에서 jupyter 가상환경 만들고, vscode에 적용하기

배경jupyter 가상환경을 vs코드에 추가하는게 뭔가 쉽지 않았다.해결한 뒤 나중에도 보기 위해 정리한다.해결과정poetry shell로 가상환경 진입가상환경 위치 찾기(project_name-py3.11) C:\Users\>poetry env info --pathC:\Users\makenow\AppData\Local\pypoetry\Cache\virtualenvs\project_name-NJYVGSWI-py3.11notebook, ipykernel 설치(project_name-py3.11) C:\Users\>poetry add notebook ipykernel패키지역할왜 필요한가?notebookJupyter 서버 실행 및 노트북 인터페이스 제공Jupyter 노트북을 실행하고, .ipynb 파일을 관리..

(ProcessPoolExecutor 사용 오류) A process in the process pool was terminated abruptly while the future was running or pending

배경멀티스레드 대신 멀티프로세서(ProcessPoolExecutor) 방식을 사용하려 했다.그런데 아래 오류가 뜨면서 동작하지 않았다.BrokenProcessPool: A process in the process pool was terminated abruptly while the future was running or pending.해결과정어떻게 해도 ProcessPoolExecutor가 동작하지 않았다.오랜시간 검색끝에, 대화형 환경(주피터)에서 실행한 것이 문제라는 문서를 발견했다.공식문서 내용 요약ProcessPoolExecutor는 각 프로세스를 독립적으로 실행하므로, 프로세스가 시작될 때마다 메인 코드(즉, main 모듈)를 다시 불러와야 합니다. 이 main 모듈은 프로세스가 작업을 제대로 ..

리랭커(Reranker) 사용시 여러 문서 한번에 재정렬 시키기

배경한가지 질문에 여러 문서에서 자료를 검색기로 가져오고그 자료들을 한번에 리랭커 하고 싶다.그런데 ContextualCompressionRetriever를 사용하려면 기본 검색기(base_retriever) 값을 꼭 넣어줘야한다.ContextualCompressionRetriever를 사용 목적에 맞게 수정해, 문제를 해결하고자 한다.해결과정여러 책을 돌리면서, 검색기로 찾은 문서들이 점점 dense_docs, sparse_docs에 쌓이게 만듦base_retriever에 값이 없어도 되게(Obtional) 기존 모듈 커스터 마이징(바꿈)외부 코드 for book_name in book_names: # 검색기 설정 (리랭커 호출 없이 검색만 수행) retriever = v..

BM25를 추가한 리트리버(retriver)로 성능 올리기

배경임베딩 방식의 검색기를 사용했는데, 검색기의 성능이 좋지 않았다. 질문 14개 중에 6개만 정답이었고, 오답의 대부분이 검색기 문제로 오답이었다. # 검색기 설정 retriever = vectorstore.as_retriever( search_type="similarity_score_threshold", search_kwargs={'k': 20, "score_threshold": 0.30} )원인을 파악해보니, 자주 쓰이는 단어 때문이었다. 이유 : '여자' 라는 단어가 본문에 너무 자주 쓰여서, 검색기가 이걸 찾기가 힘듦.해결방안 : '여자'라는 단어의 중요도를 낮추고 '패션'이라는 단어에 집중해 검색 해야한다.이 문제를 해결하기 위해 만들어진게 BM25 ..

RAG 제작시 목차 제거 자동화 하기

배경목차가 있으면 Rag 검색기에 걸려서, 검색기의 성능을 떨어트렸다.원본을 눈으로 보고 전처리(목차 제거) 해줬다.대량의 문서를 업로드 할 때는, 목차 분류를 자동화 할 필요성 느낌.해결과정시행착오를 거치며 목차를 구별하는 아래 프롬트를 제작해서 LLM을 돌림."""You are tasked with identifying whether the provided text is a "목차" or part of the "본문" of a book. Follow these instructions:1. If the text contains 4 or more numeric indicators like chapter numbers or page numbers, label it as "목차".2. If the text ..

faiss.write_index 한글 제목 저장 안됨 문제

배경faiss.write_index(faiss_index, f"data\\index\\{index_name}.index")여기서 인덱스 파일 제목(index_name) 이 한글인 경우 저장 안됨, 그렇다고 아무 영어이름으로 바꾸긴 싫었음.고유 제목의 개성을 유지하면서 변환하는 방식을 모색해결과정 : base64를 통한 제목 변환import base64name="백년!@#$%^&*()_+[]{};',.//*-+."print(name)-> 백년!@#$%^&*()_+[]{};',.//*-+.# 1. 문자열을 바이트로 변환print(name.encode('utf-8'))-> b"\xeb\xb0\xb1\xeb\x85\x84!@#$%^&*()_+[]{};',.//*-+."# 2. 바이트화된 데이터 base64로 변..

캐시 생성 에러 (module 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0' has no attribute 'CLSIDToClassMap')

배경프로토타입 완성후 테스트를 며칠하고 있는데 오류발생오류 내용AttributeError: module 'win32com.gen_py.7D2B6F3C-1D95-4E0C-BF5A-5EE564186FBCx0x1x0' has no attribute 'CLSIDToClassMap'어제됐던 똑같은 코드로 오늘 했는데 실패한게 놀라움해결과정GPT 검색 결과 gen_py 캐시 폴더의 손상으로 인해 발생한 것이라는 의견C:\Users\makenow\AppData\Local\Temp\gen_py 경로의 캐시 폴더(gen_py)를 수동으로 삭제해봄삭제후 코드에서 캐시를 재생성하니 정상작동이 과정을 자동화할 필요를 느끼고, 코드 초기에 캐시에 이상이 있으면 삭제하고 재생성하는 함수를 만듦def ensure_hwp_dispa..

LLM 프로젝트에서 저장되는 로그의 용량이 너무 큰 문제

배경프로젝트 진행중 저장되는 로그파일 용량이 너무 큰 문제발생몇번 실행하니 용량이 무려 4기가가 넘었다.몇개의 스크립트를 실행하는 프로젝트였는데, 우선 가장 로그가 많은 스크립트(hwpx -> pdf)를 조사해봤다. log_file = os.path.join(path_daily_download, 'execution.log') logging.basicConfig( filename=log_file, level=logging.DEBUG, # 로그 레벨 설정 (DEBUG, INFO, WARNING, ERROR, CRITICAL) format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', datefmt='%Y-%m-%d..

ValueError: Ollama call failed with status code 500. Details: {"error":"llama runner process has terminated: CUDA error\""}

배경로컬에서 언어모델 돌리는데,자꾸 실패함.문제는 재부팅하고 초기에는 돌아갈때도 있음.오류 내용ValueError: Ollama call failed with status code 500. Details: {"error":"llama runner process has terminated: CUDA error""}과정구글에는 자료가 정말 거의 없었다.GPT에서는 메모리 문제 라고 나와, 처음에는 RAM 을 조절. llm이 동작하는 운영체제의 RAM을 더 할당함똑같은 방식으로 실패함.현재 언어모델 EEVE-Korean-10.8B로 7.7기가 (용량이 더 작은 언어모델 llama3 다운받아 테스트 해봄)결과 llama3만 동작, 재부팅하고 초반에는 EEVE-Korean-10.8B도 동작하나, 다른 프로세스 동..

험난했던 원격 실행 도전기(PsExec,WinRMOperator)

배경airflow(리눅스)에서 로컬(윈도우)에 있는 스크립트를 실행하고자 했다.그 이유는 window에서 많은 자동화 작업이(hwp_pdf 변환, LLM 변환, 카톡자동보내기) 이루어질 예정이었고, window 에서만 사용가능한 파이썬 모듈도 사용해야 했다.왜 굳이 윈도우에서 실행시키느냐는 질문도 있었지만 하고자 하는 모든게 깔끔하게 API로 갖춰진 상황은 아니였다.또한 크론탭을 통해 airflow를 사용하지 않아도 됐지만, 내가 평생 구축하고 운영하고자 하는 파이프라인이 수백개는 넘는다.이를 관리할수 있는 툴은 왠만하면 한개로 제한하고 싶다.airflow는 리눅스 하에서만 사용이 가능하기 때문에, 스케줄러 및 파이프라인 관리용으로만 쓰고,스크립트(코드)를 윈도우에 두고 윈도우 환경에서 실행 했다.실행하..