6주 동안 실전 프로젝트를 진행하면서 학습한 내용을 기록하고, 팀의 리더로서 프로젝트 매니징 경험을 기록하는 시리즈입니다.
한국특허정보원에서 개발한 언어모델 KorPatELECTRA 사용자 정의 사전을 적용해야 한다.
1. 서버 구축
1) EC2 인스턴스 생성
인스턴스 크기 | vCPU | 메모리(GiB) |
---|---|---|
t2.xlarge | 4 | 16 |
2) 엘라스틱서치의 힙메모리 설정은 전체 메모리의 50%를 넘게 되면 메모리 오버헤드로 인해 실행이 되지 않는 것을 확인했습니다. 따라서 엘라스틱서치의 힙메모리는 다음과 같이 정하였습니다.
3) 노드 역할별 분리
4) KorPatELECTRA 사용자 정의 사전을 적용하기 위해 노드별로 pat_dic_v3.txt파일을 저장했습니다
로컬에서는 사용자 정의 사전을 적용하여도 인덱스 생성에 문제가 없었습니다. 그래서 사용자 정의 사전을 적용하여 테스트를 진행했는데, 서비스 배포용 EC2 서버에서는 인덱스 생성시 메모리의 오버헤드 문제가 발생하였기 때문에 기존 메모리 설정을 조정해야 했습니다.
현재 Elasticsearch의 사용자 계정인 patent의 limits.conf 설정은 다음과 같습니다.
인덱싱을 담당하는 마스터 노드의 힙메모리 설정을 높인다.
EC2 xlarge 인스턴스의 메모리는 16GiB
기존) 마스터노드- 1GB , 데이터노드1- 3GB, 데이터노드2- 3GB
→ GC Overhead → shard의 배치가 false가 된다. unsigned node에 배치가 실패한 샤드들이 생김
인덱스 설정 리퀘스트 결과:
변경 1) 마스터노드- 2GB, 데이터노드1,2- 3GB → 같은 문제로 실패하였습니다
변경 2) 마스터노드- 4GB, 데이터노드1,2- 2GB → 같은 문제로 실패하였습니다.
레플리카 샤드의 수를 0으로 인덱스를 생성한 뒤 인덱스 설정을 1로 변경한다.
→ 한번에 들어가는 프로세스를 줄이기 위한 목적.
Put/korea-patents
{
"settings": {
"index": {
"number_of_replicas": 1
}
}
}
→ 1안과 같은 문제로 실패하였습니다.korea-patents 인덱스만 프라이머리 샤드의 수를 1개로 줄여서 생성한다.
EC2 인스턴스의 메모리 용량을 업그레이드
→ 테스트 완료 : 사용자 정의 사전을 적용하지 않은 상태에서도 적용한 것과 동일한 검색 결과 정확도를 얻을 수 있었기 때문에 사용자 정의 사전을 적용하지 않기로 결정하였습니다.
테스트 과정 확인👉 오타 교정 기능 적용 이후 검색 결과 정확도 향상을 위한 인덱스 매핑 변경 과정-②