라즈베리 파이 5에 LLM을 올리기 위한 개발설정(2)
#0. 뜬금포
개발설정이라고 제목을 정햐주긴 했지만, 라즈베리와 같은 시스템은 솔직히 다용도로 사용하기에는 제한적이라고 생각한다. PC처럼 확장성이 좋지는 않아서 거의 단일 목적으로 사용하는 개념으로 받아들이고 있다.
아두이노를 쓰다가 용량 문제가 발생하거나, OS를 꼭 써서 좀 많은 프로그램을 돌리고 싶을 때가 있다. 아두이노는 그럴 때 좀 아쉬운 면들이 있는데, 그런 것을 대체할 수 있는 정도로 이해하고 있다. 물론 이걸로 소규모 메일 서버나 NAS 같은 걸 만드는 사람들도 있긴 하지만....그냥 공짜로 주는 메일이나 1년에 얼마내고 사용하는 구글 드라이브, 이런게 좀 더 효율적일 것 같아서 나는 아예 생각도 하지 않는 편이다.
그럼 나는 왜 하고 있는 걸까?
이걸로 사업의 디테일을 잡기 위해 하는 것이다. 이미 고수들이 지천으로 깔려 있고 그들은 나 보다 100배는 더 훌륭하게 개발할 수 있는 사람들이다. 그렇지만, 그들중 이걸로 사업하는 사람은 아마도 거의 없을 것이다. 몇가지 이유가 있겠지만, 내 생각으로는 가장 큰 몇가지 이유중의 하나가 customizing이 안된다는 것이다.
customizing을 하러면 우선 하드웨어를 내 용도에 맞게 추가할 건 추가하고 뺄건 빼야 하는데, 라즈베리 파이5에 적용된 부품들중 핵심부품들은 시중에서 구할 수가 없다. 커넥터로 얼기 설기 연결된 제품을 상용화하게 되면 기술적으로나 상업적으로 많은 문제가 발생할 수 있고, 그런 문제들은 해결하기 어렵다.
제조원가 인하도 어렵고, 수급도 쉽지 않을 수 있으며, 재고로 두었을 때 불용재고가 되는 경우 재무상 심각한 타격을 받을 수도 있다. 기술적으로는 루즈한 연결성을 가지는 범용 커넥터로 내부 배선이 되었을 때 발생하는 문제점이나, 어떤 부품이 수명을 다해 교체를 하고자 할 때, 통채로 바꾸거나 고장 원인 파악 자체가 안될 수도 있기 때문이다.
그러나 장점도 있으니 성능이나 용량에 대한 타겟 시스템 evaluation이 쉽고 빠르다는 점이다. 나는 이것 때문에 라즈베리파이5를 우선 선택했다. JETSON NANO도 고민을 했는데, WiF가 없다는 점 때문에 우선순위를 뒤로 두었다. 하지만, JETSON을 라즈베리파이5보다 먼저 발주를 내두긴 했었다. 발주하고 몇일 있으니 라즈베리파이5가 나왔다는 소식을 들었고, 부랴 부랴 구매해 버렸고 여기까지 와 버렸다. 2월달까지만 이짓 저짓 다 해 볼 생각이다.
#1. 자주쓰는 명령어와 초기 설정
자주 사용하는 명령어는 물론 리눅스 명령어라서 리눅스를 많이 사용하는 사람들에겐 익숙할 것이다.
라즈베리파이5에 전원을 넣고 CMD 창을 의운 뒤 무지성으로 다음의 명령어부터 순서대로 실행하도록 하자.
명령어 | 설 명 | 비 고 |
sudo apt-get update | OS update | |
sudo apt-get full-upgrade | 부속 프로그램들 전부 upgrade | |
sudo apt-get install fonts-unfonts-core sudo apt-get install ibus sudo apt-get install ibus-hangul |
한글 폰트 설치 | |
sudo apt-get install ssh -y | SSH 설치 | realVNC 설치 때문에 하는 것이지만, 이거 안해도 realVNC는 IP로 하면 잘 붙더라. |
sudo nano /etc/ssh/sshd_config | SSH 설정 파일을 열고 맨마지막에 다음 option을 추가하자. PermitRootLogin yes PasswordAuthentication yes |
|
sudo service ssh reboot | SSH 설정하고 리부팅 |
다음은 자주 사용하게 될 명령어이다.
명령어 | 설 명 | 비 고 |
ifconfig | ip 정보를 알려준다. | |
iwconfig | LAN 연결현황을 알려준다. | |
sudo nano 파일이름 | 파일 에디터 | vi보다 쓰기 쉽다. |
sudo reboot | reboot | 프로그램 하나 설치때마다 쓴다. |
top | 메모리 사용현황을 보여준다. | |
sudo rm 파일이름/디렉토리 | 파일이나 디렉토리를 삭제한다. | |
ls -l | 현재 디렉토리 내용을 상세히 알려준다. | |
help | 명령어들에 대한 도움말 | 하나도 도움이 되지 않았다. |
이 명령어들 말고 설정 과정중에 사용할 것들이 몇가지 더 있는데, 그것들은 범용적이라기 보다는 붸리 스페샬한 것들이라 무지성으로 따라하면 될 것 같아서 해당 section에서 다루기로 한다.
top를 누르면 아래 그림과 같이 나타난다. 윈도우의 작업관리자와 비슷하게 보인다.
#2. Putty와 realVNC 설정
#2.1 Putty 설정
putty 설치하고 나면 다른 telnet 터미날들 처럼 별 문제없다.
다만 내가 좀 불편했던 것은 "폰트 크기"였다. reboot 할 때 마다 재접속해서 폰트크기를 조절해야 했는데, 그게 너무 귀찮았다. reboot이 수십번 되다보니 ^^;; 사실 microSD 카드도 서너번 다시 깔수 밖에 없었다 ~
아래 그림처럼 접속을 하고 나면 파란색 점선박스 Session으로 연결되게 된다. 빨간색 점선 박스인 Appearance를 들어가면 우측의 Font가 나와 있다. 폰트 기본이 Courier 10pt이다. 이걸 변경한후 Open을 누르지 말고 Session 으로 돌아간다.
Session으로 돌아와서 아래 그림처럼 라즈베리파이5의 IP주소랑 Session 명칭을 넣고 Save를 누른다. 그 다음에 저장한 session을 더블클릭하면 설정한 대로 실행된다.
사실 굉장히 별거 아니지만, 개발자들은 좀 민감하다. 사소한 환경의 미비로 인해 스트레스를 심하게 받을 수 있는데, 내 경우엔 reboot을 서너번 하고나서부터 짜증이 폭발해서 옵션을 찾아 다녔는데, 영어가 짧아 Appearance를 못찾았었다. 흑....노안이 큰 원인이었지만, 아무튼 찾고 나서 설정 마치고 저장하고 실행했을 때의 그 뿌듯함, 자랑스러움은 만방에 떨치고 싶었다.
#2.2 realVNC 설정
이건 그다지 설정할게 없다.
다만, 처음에는 됐는데, 이것 저것 그것까지 마구 마구 설치하고나서 봤더니 갑자기 안돼는 경우가 있다.
응. imager 다시 실행해. 깔끔하게 다 밀고 다시 깔자.
내 경우엔 사운드 지원 문제로.....이 자료 저 자료 찾다보니 나온게 있었다. 그거 깔고 VNC는 먹통되었다. 아래에 코드를 공개한다. putty만 사용하겠다면 문제는 없는데....앞으로 코딩을 할 때 realVNC를 사용해야할 때가 있을 것 같아 imager를 네번째 깔면서는 살포시 젖혀두었다.
아래건 깔면 화면이나 주변기기 전부 동작안함. git clone https://github.com/respeaker/seeed-voicecard cd /seeed-voicecard/ sudo ./install.sh sudo reboot |
#3. 고정 IP 설정
솔직히 되는지는 잘 모르겠다.
그런데 해 둬도 손해볼 것 같지는 않아서 일단 해둔다.
그냥 무지성으로 따라하자.
$ ifconfig ; IP 정보를 보고 내 라즈베리가 어떤 네트웍에 연결되어 있는지 폼 나게 봐보자.
$ sudo nano /etc/dhcp/dhclient.conf ;
파일을 열고 파일의 맨 아래에 아래처럼 작성하자. 내 경우엔 wlan0에 연결되어 있었다.
interface wlan0 static ip_address=172.30.1.96 static routers=172.30.1.254 static domain_name_servers=168.126.63.1.8.8.8.8 fd51:42f8:caae:d92e::l static netmask=255.255.255.0 |
** 8.8.8.8 fd51:42f8:caae:d92e::l는 고정값이다.
여기까지 하고 저장하고 나서 reboot를 하자.
$sudo reboot
;; DHCP server가 client에게 IP를 dynamic allocation하도록 설정되어 있는데, 그 밑에 있는 하부 시스템에서 "나는 고정해달라~!"고 해서 되는건지를 잘 모르겠다. 본 적이 없어서 ^^;; 특히 통신사 공유기에 붙인거라 내가 설정을 만질 수도 없는 것이라....아무튼 밑져도 본전이라 해뒀다.
#4. 가상환경 설정
첫 구절에 라즈베리파이에 대한 감상평을 좀 쏟아 두긴 했는데.....라즈베리를 굳이 멀티 뛰도록 하고 싶지는 않았다. 그런데, 라즈베리안이 이를 금지했다.
huggingface와 git을 하려고 했더니 굳이 가상환경을 만들어 설정하라고 했다....안 그럼 안깔아준다고....
가상환경은 처음부터 사용할 생각이 없었다. SLM 하나 돌리기도 벅찰 것 같아서였는데, 라즈베리가 강짜를 부리는 통에 고민없이 즉각 imager로 밀고 처음부터 다시 해버렸다. pip install을 무진장 돌렸었는데.....
아무튼 가상환경을 설정하는 방법은 두가지가 있다.
하나는 범용 가상환경을 사용하는 것이고, 다음은 PYTHON 기반의 가상환경이다. 나는 PYTHON 기반의 가상환경을 사용한다. SLM과 연동한 코딩이 필요하기 때문이었다.
# 4.1 virtualenv
아래 명령어를 그대로 실행해보자.
sudo apt install virtualenv
virtualenv env1 ; env1이라는 가상환경이 생겼다.
source env1/bin/activate # 활성화
deactivate # 비활성화
가상환경 설정없이 pip를 이용해서 설치할 수도 있지만 좀 비추한다.
가상환경의 장점은 프로젝트에 따라 가상환경을 설정해서 필요한 파일들을 설치할 수 있고, 그 가상환경을 삭제하면 함께 사라진다는 관리상의 이점이 있다. 그러나, 가상환경이 아닌 경우 설치된 파일들을 프로젝트 종료와 함께 정리하는 것은 그다지 쉽지 않다는 점...
내 경우엔 라즈베리파이5 하나에 하나의 프로젝트만 타겟을 했었기 때문에 가상환경의 필요성을 별로 느끼지 못했었다.
*pip install virtualenv ; 가상환경이 아닌 공통 환경에 설치된다.
#4.2 PYTHON 기반의 가상환경 설정
python을 실행하고 설치하는 것이 아니라 python을 설치하다보면 기본적으로 딸려오는 부속 파일들이 있는데, 그중 하나가 venv이다. venv를 이용해서 가상환경을 설정하는 것이다.
설정하기는 쉽다. 아래 순서대로 진행하면 된다. 역시 무지성~!
라즈베리5에는 python 3가 설치되어 있고, update와 full-upgrade를 통해 최신버전으로 업글된다.
$ python3 -m venv 환경이름
만약 환경이름이 myEnv라고 하면 myEnv/bin에 들어가서
source activate 하면 가상환경이 동작한다.
= = = = = = = = = = = =
여기까지 되었으면 이제 SLM 설정과 관련한 부분으로 넘어갈 수 있다 ~!!!
다음 포스트에서 만나자~!