Llama-2 local 설치 - install gobjc gcc-objc - LLma.cpp 컴파일러 설치
1. Llama-2 local 설치 - install gobjc gcc-objc - 컴파일러 설치
2. Llama-2 local 설치 할 때 생기는 문제들 - llama.cpp해결
**라마 2 (LLama 2)**는 **메타(Meta,페이스북)**에서 개발한 오픈소스 대규모 언어 모델(LLM large language model, GPT)입니다. 이 모델은 최대 70B 규모의 매개변수를 지원하며, GPT-3.5와 동등한 성능을 낸다고 합니다. 라마 2는 누구나 무료로 사용할 수 있으면서, 소스 코드가 공개된 오픈소스라는 것이 큰 장점을 가지고 있습니다. 또한 라마 1 보다 라마 2는 40% 더 많은 데이터를 학습하고, 콘텍스트는 2배가 많아서 추론, 코딩 숙련도, 지식 테스트 등 모든 지표에서 다른 Open LLM들 대비 우수한 성능을 낸다고 합니다.
Llama.CPP는 대규모 언어 모델 실행의 복잡성을 처리하기 위해 구축된 강력한 프레임워크입니다. 간소화된 인터페이스와 최적화된 성능을 제공함으로써 다양한 응용 프로그램에서 LLM 배포를 단순화하는 데 중추적인 역할을 합니다.
다음 내용은 "How to Install and test LLaMA 2 Locally"를 위해 준비하는 과정중에 Llama.cpp 를 컴파일하는 동안 발생하는 오류를 해결하기 위해 작성을 했습니다.
GNU Objective-C 컴파일러(GNU Objective-C compiler)는 C 언어에 객체 지향 기능을 추가한 Objective-C 코드를 컴파일하는 데 사용되는 도구입니다.
Objective-C는 C 언어에 객체 지향 프로그래밍 패러다임을 추가한 프로그래밍 언어로 Apple에서 개발되었습니다. Linux에서도 GNU Objective-C 컴파일러를 이용하기 위해서 설치가 필요한 패키지가 "gobjc gobjc++ " 입니다.
우분투와 RHEL(레드헷) 에서 패키지를 GNU Compiler Collection(GCC)의 일부로 제공하고 있습니다.
GNU Objective-C compiler : gobjc , gcc-objc 설치하기
Ubunto Linux:
# install GNU Objective-C++ compiler
sudo apt-get install gobjc gobjc++
sudo apt-get install make cmake
Redhat, CentOs, Rocky Linux:
# dnf install gcc-objc gcc-objc++
# dnf install make cmake
or
# yum install gcc-objc gcc-objc++
# yum install make cmake
gcc-objc 설치를 위한 EPEL Repository 설정
EPEL (Extra Packages for Enterprise Linux) 은
- Fedora 프로젝트에서 최신 패키지 파일을 제공하는 저장소이며, Stable한 RHEL 버전에서 보수적인 정책으로 패키지 업데이트에 포함되지 않는 추가 패키지를 설치할 수가 있습니다.
Extra Packages for Enterprise Linux 9 install
# Redhat9, CentOs9, Rocky9 EPEL Repository
sudo dnf install \
https://dl.fedoraproject.org/pub/epel/epel-release-latest-9.noarch.rpm
llma2 설치 테스트
#!/bin/bash
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
LLAMA_METAL=1 make
export MODEL=llama-2–13b-chat.ggmlv3.q4_0.bin
curl -L "https://huggingface.co/TheBloke/Llama-2-13B-chat-GGML/resolve/main/${MODEL}" -o models/${MODEL}
./main -m ./models/llama-2–13b-chat.ggmlv3.q4_0.bin - color - ctx_size 2048 -n -1 -ins -b 256 - top_k 10000 - temp 0.2 - repeat_penalty 1.1 -t 8
위의 내용을 바탕으로 LLAMA_METAL=1 make를 실행하는데 발생하는 문제를 해결해 봅니다.
llma2 설치 오류 해결 :
- llama.cpp 컴파일 해결 (https://couplewith.tistory.com/570) 를 참고 바랍니다.
다음과 같이 Foundation 파일이 없는 경우는 "gnustep gnustep-devel gobjc"를 설치합니다.
ggml-metal.m:6:9: fatal error: Foundation/Foundation.h: No such file or directory
6 | #import <Foundation/Foundation.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~
* gnustep, gnustep-devel, gobjc 를 설치합니다.
$ sudo apt-get install -y gnustep gnustep-devel gobjc
# https://github.com/MaskRay/ccls/issues/65
# - Ubuntu, one can install the Objective-C port by using:
# - After installed, the header files are found under: /usr/include/GNUstep/Foundation.
vi llama.cpp/Makefile 에서 다음과 같이 수정을 합니다.
+ 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)
# vi llama.cpp/Makefile
#
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
* 위의 부분은 "LLAMA_METAL=1 make;" 로 실행되는 상황에서 실행 되는 구간입니다.
* ggml-metal.o: 라는 바이너리 오브젝트 파일은 "ggml-mpi.c ggml-mpi.h" 를 이용하여 컴파일 됩니다.
- 아래 컴파일 명령으로 "$(CC) $(CFLAGS) -c $< -o $@" 은 다음과 같이 작성되어 있습니다.
* $(CC): 이 부분은 Make 변수인 CC에 저장된 C 컴파일러를 사용하라는 의미입니다. CC = gcc로 설정되어 있으면 실제로는 gcc가 여기에 대입됩니다.
$(GNUSTEP_FLAGS): 이는 GNUstep 프레임워크를 사용하기 위한 컴파일 플래그들입니다. gnustep-config --objc-flags 명령어를 통해 반환된 값이 여기에 대입됩니다.
-o $@: -o는 출력 파일을 지정하는 옵션입니다. $@는 현재 규칙의 목표 파일을 나타냅니다. 여기서는 ggml-metal 이라는 실행 파일이므로, -o ggml-metal 로 해석됩니다.
$<: 현재 규칙의 종속 파일 중 첫 번째 파일을 나타냅니다. 여기서는 main.m 파일을 가리킵니다.
$(GNUSTEP_LIBS): 이 부분은 GNUstep 프레임워크를 사용하는 데 필요한 라이브러리들을 나타냅니다. gnustep-config --base-libs 명령어를 통해 반환된 값이 여기에 대입됩니다.
다음과 같이 오류가 나오는 경우는 "GNU Objective-C compiler : gobjc , gcc-objc " 가 설치 되지 않아서 생기는 문제 입니다.
"sudo apt-get install gobjc gobjc++ " 와 같이 패키지를 설치를 해야 합니다.
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 -Wpointer-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
cc: error: ggml-metal.m: Objective-C compiler not installed on this system
make: *** [Makefile:506: ggml-metal.o] 오류 1
위의 내용으로 필요한 패키지가 설치가 되면 다음과 같은 내용을 실행할 수 있습니다.
$ git clone https://github.com/ggerganov/llama.cpp.git
$ cd llama.cpp
$ make clean
$ make
$ LLAMA_METAL=1 make
다음과 같이 정상으로 컴파일이 되었습니다.
couple@mygpt:/mydata/llma2/llama.cpp$ LLAMA_METAL=1 make
I ccache not found. Consider installing it for faster compilation.
I llama.cpp build info:
I UNAME_S: Linux
I UNAME_P: x86_64
I UNAME_M: x86_64
I CFLAGS: -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 -Wpointer-arith -Wmissing-prototypes -Werror=implicit-int -Werror=implicit-function-declaration -pthread -march=native -mtune=native -Wdouble-promotion
I CXXFLAGS: -I. -Icommon -D_XOPEN_SOURCE=600 -D_GNU_SOURCE -DNDEBUG -DGGML_USE_METAL -std=c++11 -fPIC -O3 -Wall -Wextra -Wpedantic -Wcast-qual -Wno-unused-function -Wmissing-declarations -Wmissing-noreturn -pthread -march=native -mtune=native -Wno-array-bounds -Wno-format-truncation -Wextra-semi
I NVCCFLAGS: -O3
I LDFLAGS: -framework Foundation -framework Metal -framework MetalKit
I CC: cc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
I CXX: g++ (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0
make: *** No rule to make target '/usr/include/GNUstep/F', needed by 'common.o'. Stop.
이제 라마를 시작하는 처음 단계를 넘었습니다. LLma2를 이용하는 방법은 따로 정리를 하겠습니다. 감사합니다.
[참고]
[BigData] - Llama-2 local 설치 할 때 생기는 문제들 - llama.cpp해결
[BigData] - Llama-2 local 설치 - install gobjc gcc-objc - LLma.cpp 컴파일러 설치
Simple Guide to Running LlaMA 2 Locally
[Llama.cpp] Inference of Meta's LLaMA model (and others) in pure C/C++