Llama-2 local 설치 할 때 생기는 문제들 - llama.cpp해결
1. Llama-2 local 설치 - install gobjc gcc-objc - 컴파일러 설치
2. Llama-2 local 설치 할 때 생기는 문제들 - llama.cpp해결
**라마 2 (LLama 2)**는 **메타(Meta,페이스북)**에서 개발한 오픈소스 대규모 언어 모델입니다. 이 모델은 최대 70B 규모의 매개변수를 지원하며, GPT-3.5와 동등한 성능을 낸다고 합니다. 라마 2는 누구나 무료로 사용할 수 있으면서, 소스 코드가 공개된 오픈소스라는 것이 큰 장점을 가지고 있습니다. 또한 라마 1 보다 라마 2는 40% 더 많은 데이터를 학습하고, 콘텍스트는 2배가 많아서 추론, 코딩 숙련도, 지식 테스트 등 모든 지표에서 다른 Open LLM들 대비 우수한 성능을 낸다고 합니다.
Llama.CPP는 대규모 언어 모델 실행의 복잡성을 처리하기 위해 구축된 강력한 프레임워크입니다. 간소화된 인터페이스와 최적화된 성능을 제공함으로써 다양한 응용 프로그램에서 LLM 배포를 단순화하는 데 중추적인 역할을 합니다.
(Llama.cpp : https://github.com/ggerganov/llama.cpp)
Llama.CPP 를 실행해 보니 일반 PC에서는 무진 느리다는 점을 체감하면서 그 동안 설치를 위해서 온갖 역경을 지나온 내용을 정리 드립니다.
아래와 같이 질문을 했는데 1분동안 써 놓은 글자가 "The Llama-2 model is a deep learning architecture that was proposed in.." 고작 여기까지 답변이 나오고 있습니다. 계속 기다리면 될 것 같은데 답변이 상당히 느리게 나옵니다. (1분에 10자 정도 출력중입니다. ㅠㅠ)
작동한 환경이 Vbox에서 CPU 2core, Memory 7GB를 할당했는데 .. GPU를 사용하지 않아서 그런가보다 생각해 봅니다.
>> CPU load average: 8.81, 6.69, 3.72 인것을 봐서는 열심히 무엇인가를 하고 있답니다.
일단 이런 화면하나 작동하는데 며칠 고생좀 했습니다. 검색을 해도 답변들이 제대로 안되어서 그렇기도 하고 짬짬히 하다보니 안되는 문제들을 조금씩 해결했습니다.
Llama-2 local 환경에 설치하면서 llama.cpp 컴파일 관련 발생하는 문제를 정리해 봅니다.
Llama-2 모델을 다운받아 local에서 사용하는 방법으로 아래와 같이 진행합니다. 로컬에서 설치하고 사용할때 llama.cpp를 이용해서 테스트를 하는데 컴파일 오류가 발생 합니다.
Llama.cpp에 대한 컴파일 하면서 발생하는 오류의 관련 문제를 해결해서 확인된 내용을 공유해 봅니다.
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
LLAMA_METAL=1 make
export MODEL="llama-2-7b-chat.Q4_K_M.gguf"
curl -L "https://huggingface.co/TheBloke/Llama-2-7B-chat-GGUF/resolve/main/${MODEL}" -o models/${MODEL}
/data/llma2/llama.cpp/main -m /data/llma2/llama.cpp/models/llama-2-7b-chat.Q4_K_M.gguf \
--color --ctx_size 2048 -n -1 -ins -b 256 --top_k 10000 --temp 0.2 --repeat_penalty 1.1 -t 8
[오류1] ‘_mm256_fmadd_ps’: target specific option mismatch
VirtualBox에 llma.cpp를 다운 받아 컴파일 하는데 오류가 계속 나왔다. 아래와 같이 CPU 관련 컴파일 옵션을 추가해서 수정해서 해결이 되었습니다.
+ MK_CFLAGS += -mfma -mf16c -mavx
+ MK_CXXFLAGS += -mfma -mf16c -mavx
ifeq ($(UNAME_M),$(filter $(UNAME_M),x86_64 i686 amd64))
# Use all CPU extensions that are available:
MK_CFLAGS += -march=native -mtune=native
HOST_CXXFLAGS += -march=native -mtune=native
# Usage AVX-only
#MK_CFLAGS += -mfma -mf16c -mavx
#MK_CXXFLAGS += -mfma -mf16c -mavx
MK_CFLAGS += -mfma -mf16c -mavx
MK_CXXFLAGS += -mfma -mf16c -mavx
# Usage SSSE3-only (Not is SSE3!)
#MK_CFLAGS += -mssse3
#MK_CXXFLAGS += -mssse3
endif
In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h:99,
from ggml-impl.h:77,
from ggml-quants.h:3,
from ggml-quants.c:1:
/usr/lib/gcc/x86_64-linux-gnu/11/include/fmaintrin.h:63:1: error: inlining failed in call to ‘always_inline’ ‘_mm256_fmadd_ps’: target specific option mismatch
63 | _mm256_fmadd_ps (__m256 __A, __m256 __B, __m256 __C)
cc -I. -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -std=c11 -fPIC -O3 -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wshadow -Wstrict-prototypes -Wpointer-arith -Wmissing-prototypes -Werror=implicit-int -Werror=implicit-function-declaration -pthread -march=native -mtune=native -Wdouble-promotion -c ggml-quants.c -o ggml-quants.o
In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h:99,
from ggml-impl.h:77,
from ggml-quants.h:3,
from ggml-quants.c:1:
ggml-quants.c: In function ‘ggml_vec_dot_q4_0_q8_0’:
/usr/lib/gcc/x86_64-linux-gnu/11/include/fmaintrin.h:63:1: error: inlining failed in call to ‘always_inline’ ‘_mm256_fmadd_ps’: target specific option mismatch
63 | _mm256_fmadd_ps (__m256 __A, __m256 __B, __m256 __C)
| ^~~~~~~~~~~~~~~
ggml-quants.c:3752:15: note: called from here
3752 | acc = _mm256_fmadd_ps( d, q, acc );
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from /usr/lib/gcc/x86_64-linux-gnu/11/include/immintrin.h:99,
from ggml-impl.h:77,
from ggml-quants.h:3,
from ggml-quants.c:1:
/usr/lib/gcc/x86_64-linux-gnu/11/include/fmaintrin.h:63:1: error: inlining failed in call to ‘always_inline’ ‘_mm256_fmadd_ps’: target specific option mismatch
63 | _mm256_fmadd_ps (__m256 __A, __m256 __B, __m256 __C)
| ^~~~~~~~~~~~~~~
[오류2] Foundation/Foundation.h: No such file or directory
<Foundation/Foundation.h>을 찾을수 없다는 이슈로 gobjc를 설치합니다.
sudo apt-get install gobjc gobjc++
sudo apt-get install make cmake
그럼에도 불구하고 똑같은 오류가 발생하여 "Makefile"을 다음과 같이 수정을 하였다. (각 시스템의 cpu에 따라 다르다고 합니다. virtualbox를 기준으로 작동이 되었습니다.)
+ GNUSTEP_FLAGS = $(shell gnustep-config --objc-flags)
+ GNUSTEP_LIBS = $(shell gnustep-config --base-libs)
ifdef LLAMA_METAL
ggml-metal.o: ggml-metal.m ggml-metal.h
- $(CC) $(CFLAGS) -c $< -o $@
+ $(CC) $(CFLAGS) -c $< -o $@ $< $(GNUSTEP_LIBS)
*/usr/include/GNUstep/Foundation/Foundation.h 파일은 있지만 컴파일이 되지 않는 경우 다음과 같이 수정합니다.
GNUSTEP_FLAGS = $(shell gnustep-config --objc-flags)
GNUSTEP_LIBS = $(shell gnustep-config --base-libs)
ifdef LLAMA_METAL
ggml-metal.o: ggml-metal.m ggml-metal.h
$(CC) $(CFLAGS) -c $< -o $@ $< $(GNUSTEP_LIBS)
endif # LLAMA_METAL
<Foundation/Foundation.h> 을 찾을수 없다는 오류가 발생될때
cc -I. -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_METAL -std=c11 -fPIC -O3 -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wshadow -Wstrict-prototypes -Wp ointer-arith -Wmissing-prototypes -Werror=implicit-int -Werror=implicit-function-declaration - pthread -march=native -mtune=native -Wdouble-promotion -c ggml-metal.m -o ggml-metal.o
ggml-metal.m:6:9: fatal error: Foundation/Foundation.h: No such file or directory
6 | #import <Foundation/Foundation.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
[참고]
How to Download and Install Llama 2 Locally : https://www.makeuseof.com/how-to-download-and-install-llama-2-locally/
A Simple Guide to Running LlaMA 2 Locally: https://www.kdnuggets.com/a-simple-guide-to-running-llama-2-locally
(Liama사용법) https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/blob/main/README.md
(Llama-2) TheBloke/Llama-2-7B-Chat-GGUF : https://huggingface.co/TheBloke/Llama-2-7B-Chat-GGUF/tree/main
Foundation/Foundation.h file not found for Objective-C. · Issue #65 · MaskRay/ccls (github.com)
[BigData] - Llama-2 local 설치 할 때 생기는 문제들 - llama.cpp해결
[BigData] - Llama-2 local 설치 - install gobjc gcc-objc - LLma.cpp 컴파일러 설치