[머신러닝 프로젝트 7] 병렬처리 모듈 어떻게 만드나

2018-10-10
글 | 정 재 준 대표, 커널연구회, rgbi3307@nate.com, www.kernel.bz



머신러닝 프로젝트, 똑똑한 왕자(SmartPrince) 만들기 7

프로젝트 과정 목차

1. 인공지능(AI)이란 무엇인가?
2. 전원 배터리모듈 개발과정 및 기능
3. 센서제어 모듈 개발과정 및 기능
4. 모터제어 모듈 개발과정 및 기능
5. 카메라 Pan/Tilt 모듈 개발과정 및 기능
6. 음성처리 모듈 개발과정 및 기능
7. 병렬처리 모듈 개발과정 및 기능
8. 머신러닝 기능 개발과정 및 기능

똑똑한 왕자(SmartPrince) 소개

커널연구회에서 지능형로봇 만들기로 진행하는 SmartPrince(똑똑한 왕자) 시리즈는 커널연구회에서 제작한 9개의 모듈들에 머신러닝 알고리즘을 탑재하는 오픈플랫폼, 오픈소스 프로젝트이다. 각각의 모듈들은 독립된 형태로 동작할 수도 있고, 라즈베리파이 및 아두이노 호환 핀맵에 모듈들을 적층으로 쌓아서 한꺼번에 병렬로 동작시킬 수도 있다. 모듈에 있는 USB에 시리얼통신 명령어(AT Command)를 전송하여 모듈들을 제어한다.

SmartPrince 병렬처리 모듈

커널연구회의 SmartPrince 병렬처리 모듈은 라즈베리파이3 컴퓨팅 모듈 4개를 병렬로 장착할 수 있도록 설계한 보드이다. 라즈베리파이 재단에서 컴퓨팅 모듈을 장착할 수 있는 보드를 제공하고는 있으나 1개만을 장착할 수 있기 때문에 컴퓨팅 모듈의 장점을 최대화하지 못하는 문제가 있고 가격 또한 상대적으로 비싼 편이다.



이러한 단점을 해결하기 위해서 커널연구회에서 라즈베리파이3 컴퓨팅모듈 4개를 1개 조로 장착할 수 있는 SmartPrince 병렬처리 보드를 개발했다.

이 보드를 사용하면 라즈베리파이3 컴퓨팅 모듈의 장점을 극대화하여 병렬처리 네트워크 클러스터를 저렴한 가격으로 구축할 수 있다. 특히 하드웨어 자원을 많이 필요로 하는 머신러닝/딥러닝에 적용할 수 있으며, 무엇보다 저렴한 가격에 머신러닝/딥러닝 환경을 책상위에 개인용으로 구축할 수 있다.



그림 2는 SmartPrince 병렬처리 보드의 외형이다. 라즈베리파이3 컴퓨팅 모듈을 세로방향으로 장착할 수 있는 슬롯을 4개 배치하여 공간을 절약했다. 단일 5V 전원공급으로 모듈 4개가 한꺼번에 동작한다. 모듈끼리 데이터 교환할 수 있도록 I2C와 SPI 인터페이스를 연결했고, 모듈마다 USB 포트를 통하여 외부로 데이터 통신할 수 있도록 했다. USB에는 각종 장치들을 연결할 수 있다. 특히 WiFi 무선통신 및 TCP/IP 유선 이더넷 통신선을 연결할 수 있도록 구성하여 네트워크 병렬처리 클러스터로 확장해 나갈 수 있다.

리눅스 배포본(NOOBS)

라즈베리파이 리눅스 설치본은 라즈베리파이 재단 웹사이트에서 배포한다.
https://www.raspberrypi.org/downloads/

라즈베리파이 리눅스 배포본은 위의 다운로드 주소에서 항상 최신 버전을 배포한다. 아울러 리눅스 커널 버전도 최신 버전으로 업데이트된다. 필자가 이 기고글을 집필하는 시점 이후에는 좀더 높은 버전이 다운로드 될 것이다. 항상 높은 버전을 설치하여 개발 작업을 진행하면 좋겠지만, 문제는 버전업 될 때마다 여러 가지 장치를 운용하는 리눅스 커널의 드바이스 드라이버가 달라지기 때문에 이전 버전에서 잘 동작하던 프로그램이 새로운 커널 버전에서 동작하지 않는 문제가 발생할 수 있다.

위와 같은 버전관리 문제 때문에 커널연구회의 SmartPrince 병렬처리 모듈은 리눅스 커널 4.1.19버전에서 잘 동작하도록 맞추어져 있다. 아울러 머신러닝/딥러닝 코드들과 여러 가지 장치를 동작시키는 프로그램들도 이 버전에 맞추어져 있기 때문에, SmartPrince 병렬처리 모듈을 동작시키기 위해서는 커널연구회에서 배포하는 SD카드를 다음과 같이 SD카드 슬롯에 장착하여 부팅해야 한다.



네트워크 연결 및 설정

네트워크는 TCP/IP 이더넷을 무선(WiFi)과 유선으로 모두 연결된다. 모듈마다 USB 포트가 있으므로 여기에 USB to 이더넷 케이블을 연결할 수 있도록 했고, 무선 WiFi 동글도 USB 허브에 연결된다.



4개 슬롯의 USB to 이더넷 케이블들은 스위칭 허브와 연결하여 내부 네트워크 망을 구성한다(위). 또한 5번째 이더넷 케이블은 외부와 연결될 수 있도록 했다(아래).

네트워크 IP는 첫 번째 모듈이 10.10.0.1 아이피 번호로 설정되고 두 번째 모듈은 10.10.0.2, 세 번째 모듈은 10.10.0.3, 네번째 모듈은 10.10.0.4로 설정된다. 외부로 나가는 IP는 10.10.0.5로 설정되어 있다. 또한 첫 번째 모듈에 WiFi USB 동글을 장착하여 무선 AP Host로도 동작하므로 외부에서 무선으로 모든 모듈에 접근할 수 있다.

이러한 네트워크 설정은 커널연구회에서 배포한 SD카드에 다음과 같이 설정되어 있다.





위의 네트워크 설정은 커널연구회에서 제공하는 SD카드에 이미 설정되어 있으므로 SD카드를 슬롯에 장착하여 부팅만 하면 된다.

네트워크 브릿지 설정

네트워크 브릿지는 유선(eth0) 장치와 무선 WiFi(wlan0) 장치가 서로 다른 IP 대역을 사용하고 있더라도 같은 내부 네트워크망으로 접근될 수 있도록 해주기 때문에, 같은 내부 IP로 유선과 무선을 동시에 사용할 수 있다. 이렇게 설정하는 것 또한 커널연구회에서 제공하는 SD카드에 모두 설정되어 있으므로 SD카드를 슬롯에 장착하여 부팅만 하면 된다.

네트워크 브릿지 설정이 궁금한 독자는 아래 내용을 참고해 주기 바란다.


무선 WiFi을 Host AP로 동작하도록 hostap 프로그램을 다음과 같이 확인한다.



hostap 는 다음과 같이 설정한다.







NFS 설치하기

NFS(Network File System)는 SUN사가 개발한 RPC(Remote Procedure Call) 기반 시스템으로, NFS 서버의 특정 경로를 파일시스템으로 마운트하여 네트워크에서 자신의 영역인 것처럼 사용할 수 있도록 해준다. Server/Client 기반에서 서버의 파일을 클라이언트들이 공유하여 사용할 수 있는 장점이 있다.

SmartPrince 병렬처리 모듈도 4개의 모듈들을 NFS로 묶어서 하나의 파일 시스템처럼 사용할 수 있다. 이렇게 하면 모듈간 파일 데이터 교환(파일 추가, 수정, 삭제)이 편리해 진다.

이렇게 설정하는 것 또한 커널연구회에서 제공하는 SD카드에 모두 설정되어 있으므로 SD카드를 슬롯에 장착하여 부팅만 하면 된다.
NFS 설정이 궁금하신 독자분은 아래 내용을 참고해 주기 바란다.



다음과 같이 패키지들이 설치 진행된다.




설치가 완료되면 다음과 같이 서버인 라즈베리파이에서 클라이언트에 공유할 경로를 생성한다.

그런 다음 이 경로에 읽고, 쓰고, 실행하는 권한을 부여한다.



다음은 NFS 환경설정 파일인 /etc/exports 파일에 아래의 내용을 vi 편집기로 추가한다.



NFS 서버를 다음과 같이 실행한다.



rpcinfo을 실행하면 다음과 같이 NFS 서버가 사용하고 있는 포트 번호들이 출력된다.



위와 같이 NFS 서버를 설치한 후에 클라이언트 머신에서 NFS 서버 경로를 다음과 같이 마운트하여 사용한다.



위와 같이 마운트하면 SmartPrince 모듈의 /home/pi/nfs 경로가 /mnt/cm0# 모듈 번호별로 마운트되어 파일시스템 경로를 공유하여 사용할 수 있게 된다.

마운트된 파일 경로를 해제하는 스크립트는 다음과 같다.



원격 데스크톱 연결 방법

SmartPrince 병렬처리 모듈은 라즈베리파이3가 4개 동시 동작하고 있는 것과 같으므로 4개 마다 각각 HDMI 화면과 키보드, 마우스를 연결하여 동작을 로컬로 확인하는 것은 상당히 번거롭고 불편하다. 그러므로 위에서 언급한 네트워크를 구성하여 NFS나 SSH로 접속하여 동작을 실행하고 확인하면 된다. NFS나 SSH는 작업환경이 텍스트로 구성되어 있어서 GUI 기반의 화면은 볼 수가 없다. 하지만, 라즈베리파이3의 HDMI 출력 화면을 원격지에서도 네트워크로 접속하여 사용할 수 있도록 원격 데스크톱 기능이 설정되어 있다.

원격지의 내PC 혹은 노트북에서 SmartPrince 병렬처리 모듈에 무선 네트워크 데스크톱으로 연결하는 과정은 다음과 같다(윈도우 기준 설명).

윈도우 메뉴에서 네트워크 연결을 클릭하면 그림 5와 같은 창이 나타난다.



Wi-Fi 아이콘을 마우스 오른쪽 클릭하여 나타난 팝업메뉴에서 “사용” 메뉴를 클릭한다.



다시 Wi-Fi 아이콘을 마우스 오른쪽 클릭하여 나타난 팝업메뉴에서 “연결” 메뉴를 클릭한다.



연결을 클릭하면 다음과 같이 주변에서 WiFi을 검색하여 접속할 수 있는 SSID을 표시해 준다. SmartPrince##(번호)가 접속할 수 있는 SSID이다.



SmartPrince00을 선택한 후 “자동으로 연결”을 체크하고 연결 버튼을 누른다. 다음과 같이 접속 암호를 물어보면 kernel.bz을 입력한다.



위의 연결암호는 입력할 때 화면에 나타나지 않는다. 한번 연결이 되면 다음부터는 암호를 입력하지 않아도 자동으로 연결된다.

잠시 기다리면 SmartPrince00에 연결되었다는 메시지가 나타날 것이다. 연결되면 네트워크 연결창에서 Wi-Fi 아이콘을 마우스 오른쪽 클릭하여 나타난 팝업 메뉴에서 다음과 같이 상태 정보를 확인한다.



WiFi 상태 정보창에서 자세히 버튼을 클릭하면 다음과 같이 무선 네트워크 연결 세부 정보창이 나타난다.



위의 세부정보에서 DHCP서버 10.20.0.1, DNS 서버 10.20.0.1이 SmartPrince00의 아이피 정보이다. SmartPrince00의 네크워크 아이피가 10.20.0.1라는 것이다.

이제 다음과 같이 실행하여 SmartPrince00에 원격 접속해 보자.



윈도우 메뉴에서 실행을 클릭한 후, 실행창에 mstsc을 입력하고 확인 버튼을 누른다.



mstsc는 윈도우에서 실행되는 원격연결 프로그램이다. 이 프로그램을 실행하면 다음과 같이 원격 데스크톱 연결 창이 나타나면서 원격 연결이 진행된다.



위의 창에 원격 연결 대상인 스마트홈 M의 아이피(10.20.0.1)를 입력한 후 연결 버튼을 클릭한다.



위의 창은 원격 데스크톱 연결을 확인하는 창이다. 예(Y) 버튼을 클릭하여 원격 연결을 진행한다.



Module(Sessio)은 설정된 그대로 사용한다.
username란에는 pi을 입력한다.
password란에는 kernel.bz을 입력한다.

위와 같이 입력한 후 OK 버튼을 클릭하면 접속이 진행된다. 잠시 기다리면 다음과 같이 SmartPrince00에 접속하여 그곳의 바탕화면이 나타난다. 이제 SmartPrince00에 연결되었다. 아래 메뉴들은 SmartPrince00에 있는 것이므로 그곳에서 내PC처럼 사용할 수 있게 된다.



※ 기타 문의 사항은 이메일(rgbi3307@nate.com)을 보내 주시기 바랍니다.
 

<저작권자©스마트앤컴퍼니. 무단전재-재배포금지>


100자평 쓰기

관련 기사

오피니언
2023 및 2024 베스트 제품
스타트업이 뜬다
기술 리포트가 뜬다