bab2min / Kiwi

Kiwi(지능형 한국어 형태소 분석기)
https://lab.bab2min.pe.kr/kiwi
Other
396 stars 46 forks source link

버전 0.15.2 초기화 중 다운되는 현상 #134

Closed mook1027 closed 1 year ago

mook1027 commented 1 year ago

안녕하세요. 0.15.2 버전으로 JNI 구현해서 Java 프로그램에서 kiwi_init 을 호출했는데 도중에 EXCEPTION_ILLEGAL_INSTRUCTION으로 다운되었습니다. 아래 코드 마지막 줄 lm::KnLangModelBase::create() 리턴 값을 langMdl.knlm 에 쓰는 동작에서 발생하는것 같습니다. 확인 부탁드립니다.

KiwiBuilder::KiwiBuilder(const string& modelPath, size_t _numThreads, BuildOption _options, bool useSBG) : detector{ modelPath, _numThreads }, options{ _options }, numThreads{ _numThreads ? _numThreads : thread::hardwareconcurrency() } { archType = getSelectedArch(ArchType::default);

{
    utils::MMap mm{ modelPath + "/sj.morph" };
    utils::imstream iss{ mm };
    loadMorphBin(iss);
}

langMdl.knlm = lm::KnLangModelBase::create(utils::MMap(modelPath + string{ "/sj.knlm" }), archType);
bab2min commented 1 year ago

안녕하세요 @mook1027 해당 오류를 재현해보려면 좀 더 구체적인 정보가 필요해보이는데요, JNI 구현은 어떻게 하셨는지, 사용하신 Java 버전은 무엇인지, 어떤 환경(OS 및 CPU 등의 장비)에서 수행하셨는지 등의 정보도 제공해주시면 원인을 찾는데에 도움이 될듯합니다.

mook1027 commented 1 year ago

안녕하세요. 정보를 너무 안드렸네요. ; Windows11, i7 12세대 CPU(12 코어, 논리 프로세서 16개) JDK-17 입니다.

Visual Studio community2022 에서 JNI 프로젝트를 만들어서 dll 파일을 만들고, 이것을 Java 프로젝트에 추가하여 사용했습니다. 사용한 JNI 헤더와 dll 빌드시 속성 설정 내용 첨부합니다. com_urp_jni_UrpKiwi.zip dll 빌드설정.zip

bab2min commented 1 year ago

@mook1027 자세한 정보 공유해주셔서 감사합니다. 확인해보니 Windows 환경에서 Visual Studio를 사용해 컴파일하셨고, Alder Lake 아키텍처 CPU 사용중이시네요. 현재 세팅의 Kiwi에서는 MSVC에서 컴파일할 경우에 cpuinfo가 disable되고 자동으로 가장 최신 명령어인 AVX512를 사용하도록 컴파일되는데요, 구동하시는 Alder Lake CPU에서는 AVX512가 지원되지 않기 때문에 발생하는 오류입니다. Java 구동에 앞서 환경변수로 KIWI_ARCH_TYPE=avx2를 등록해주시면 Kiwi 생성시 AVX512대신에 AVX2를 사용하도록 하여 오류를 피할 수 있을 거에요.

mook1027 commented 1 year ago

환경변수 설정하니 잘 동작합니다. 감사합니다!!