Tip: 리눅스 환경(Centos 7)에서 SSH Terminal + Docker + Jupyter Notebook을 이용한 Tensorflow GPU 버전 사용

리눅스 환경(Centos 7 기준)에서 Nvidia Docker를 이용하여 Tensorflow GPU 버전을 사용하는 방법에 대해 알아보겠습니다.

먼저 리눅스 환경에서 Docker를 설치합니다.
Docker 설치 방법은 아래 링크를 참고해주세요.
https://github.com/NVIDIA/nvidia-docker
https://docs.docker.com/install/linux/docker-ce/centos/

Docker 설치 후 일반 계정에서 Docker를 사용할 수 있도록 권한을 부여해줍니다.
root 계정으로 로그인 한 다음, shell에서 usermod -aG docker <id> 를 입력해줍니다.
입력 후 다시 로그인합니다.

Nvidia Docker를 사용하면 CUDA, CUDNN 등 CUDA 프로그래밍에 필요한 파일들을 설치하지 않아도 됩니다. Graphic Driver만 설치되어 있으면 사용이 가능합니다.
shell에서 nvidia-smi 명령어를 사용하여 Graphic Driver가 설치되어있는지 확인합니다.
만약 드라이버가 설치되어 있지 않다면 설치합니다.
https://www.nvidia.com/Download/index.aspx

드라이버가 설치되었으면, Nvidia tensorflow gpu 버전 docker 이미지를 다운받습니다.
docker pull 명령어를 통해 docker image를 다운받는데, 이 때 다양한 태그를 통해 여러 버전의 이미지를 받을 수 있습니다.
(참고 : https://www.tensorflow.org/install/docker )
이번에는 Tensorflow GPU, Python3, Jupyter notebook 환경을 사용할 것이기 때문에, 아래와 같이 shell에 명령어를 입력합니다.
docker pull tensorflow/tensorflow:latest-gpu-py3-jupyter

다운로드가 완료됐으면 docker images 명령어를 통해 이미지를 확인해줍니다.

그 다음 docker container를 만듭니다. container를 만드는 명령어는 다음과 같습니다.

docker run –runtime=nvidia –name=<name> -v </home/ID/directory:/directory -it –entrypoint=bash -p 8888:8888 -p 6006:6006 tensorflow/tensorflow:latest-gpu-py3-jupyter

위의 명령어를 실행하기 전에 위에서 사용된 docker 명령어에 대해 알아봅시다.
1) –name=<name> 도커 컨테이너의 이름을 지정해주는 명령어입니다. 컨테이너를 다시 시작할 때, 복잡한 컨테이너 ID를 사용하기 번거러우므로, 별명을 지정해줘서 사용하기 편하게 해줍니다. <name> 부분에 본인이 원하는 이름을 적어주면 됩니다.

2) -v 호스트의 디렉토리를 도커 컨테이너에 마운트 하는 명령어입니다. 호스트에 있는 파일을 작업하기 편하도록 마운트 해줍니다. 마운트하기 원하는 디렉토리의 주소(pwd 명령어로 확인)를 </home/ID/directory:/directory> 형식으로 입력합니다.

3) -it 명령어로 shell에 입출력이 가능해집니다.

4) –entrypoint=bash 컨테이너 시작시에 수행할 명령어입니다. 위의 예시의 경우 Jupyter notebook이 자동으로 실행되지 않게 하기 위해 입력한 것입니다.

5) -p 8888:8888 -p 6006:6006 Jupyter notebook (8888)과 tensorboard (6006)를 사용하기 위해 포트 설정을 해주는 옵션입니다.

사용 예시) 만약, test라는 계정의 works 디렉토리를 컨테이너에 works 디렉토리로 만들고 컨테이너 이름을 hello로 만들고 싶다면, 다음과 같이 입력하면 됩니다. (v, it, p 앞에는 – 1개, runtime, name, entrypoint 앞에는 – 2개)
docker run –runtime=nvidia –name=hello -v /home/test/works:/works -it –entrypoint=bash -p 8888:8888 -p 6006:6006 tensorflow/tensorflow:latest-gpu-py3-jupyter

성공적으로 컨테이너가 만들어 졌다면 아래와 같은 화면이 출력됩니다.

호스트의 디렉토리가 마운트 된 것도 확인할 수 있습니다.

이어서 사용환경 setting에 대해 알아보겠습니다.
nvidia docker 이미지는 ubuntu os가 설치되어 있습니다. 하지만 기본적인 프로그램 설치가 되어있지 않기 때문에 필요한 프로그램을 설치해줍니다.
저는 우선 vim 편집기를 설치했습니다
shell에 apt-get install vim 입력하고 설치합니다.

그 다음 jupyter notebook을 실행합니다.
그러면 아래와 같은 에러 메시지가 출력됩니다.

해당 에러를 해결하기 위해, jupyter notebook configuration 파일을 생성해줍니다.
shell에 jupyter notebook –generate-config 명령어를 입력합니다. (generate 앞에 – 2개, config 앞에 – 1개)

그 다음 vim 편집기를 이용해 config 파일을 수정해줍니다.
shell에 vi /root/.jupyter/jupyter_notebook_config.py 를 입력해줍니다.

vim 편집기 에서 / 를 사용하여 notebook_dir, NotebookApp.ip, NotebookApp.port, allow_root, 를 각각 검색합니다.
notebook_dir는 노트북 시작시 홈 디렉토리를 설정하는 파라미터입니다. 마운트 한 디렉토리로 바꾸는것이 사용에 편리할 것입니다.
ip 는 ‘0.0.0.0’ 으로 수정합니다.
port 는 8888로 수정합니다.
allow_root는 True로 바꿔줍니다.

(수정할 때 앞의 주석처리 #을 지워주는것을 잊지 마세요!)

위와 같이 수정했다면 :wq 를 입력하여 수정한 파일을 저장합니다. 그 다음 다시 jupyter notebook을 실행합니다.

이렇게 된 상태에서 터미널을 하나 더 실행하여 host 계정으로 접속합니다. host에서 웹 브라우저를 실행합니다. 저는 firefox를 사용하겠습니다.

웹브라우저 주소창에 127.0.0.1:8888 을 입력합니다.

아래와 같은 창이 뜨면, 도커 컨테이너에서 token 값을 복사하여 입력합니다.
그리고 필요에 따라 password를 설정해서 사용할 수 있습니다.

토큰을 입력하면 다음과 같이 실행됨을 알 수 있습니다.

수고하셨습니다. 연구에 도움이 되길 바랍니다.

책: 국가란 무엇인가(유시민 작가)

“국가란 무엇인가”라는 다소 식상하고 지루할 수 있는 주제를 유시민 작가만의 독특한 화법으로 이해하기 쉽게 설명해줍니다. 앞 장에서는 ‘국가란 무엇인가’ , ‘누가 다스려야 하는가’ 라는 주제로 동서고금 철학자들의 생각을 시대순으로 언급하면서 국가관의 발전상을 보여주었고, 제 5장 ‘애국심은 고귀한 감정인가’ 라는 의문사 형태로 질문하면서 애국심이란 국가라는 특수한 집단에 의해 생겨난 상호 배타적인 감정이라고 말합니다. 그런 다음, 제 6장 ‘혁명이냐 개량이냐’에서는 혁명은 개량의 길이 봉쇄되었을 때 즉, 점진적 공학이 더 이상 소용이 없을 때 일어난다고 하였으며 제 7장 ‘진보정치란 무엇인가’에서부터 작가가 원하는 정의로운 국가의 모습이 어떠한 형태인지 나타나게 됩니다. 마지막 장에는 우리나라 정치와 국가 방향에 대한 솔직한 생각을 피력하면서 마무리합니다.

작가가 꿈꾸는 훌륭한 국가는 고대 그리스 목적론적 국가론처럼 사람들 사이에 정의를 실현하는 국가라고 합니다. 국민 한 사람 한 사람을 수단이 아니라 목적으로 대하고(칸트의 도덕법), 국민을 인간으로 존중하고 책임지고 보호해주는 그런 국가(진보자유주의, 복지국가)를 말합니다. 그는 촛불집회를 보면서 “이게 나라냐” , “이것이 국가란 말인가?”라는 구호를 듣게 되었고 2011년에 출판한 이 책이 개정신판으로 다시 세상에 나오게 되었습니다.

저는 아직까지 모두가 훌륭하다고 할 수 있는 그런 국가를 경험해보지 못 한 것 같습니다. 그러나 불행 중 다행인 점은 우리나라는 악을 최소화할 수 있는 제도가 있는 민주주의 사회에 살고 있으며 모든 시민들이 국정에 관심을 가지고 훌륭한 국가를 만들려고 노력한다면 마냥 불가능한 이야기는 아닐 것이라고 생각합니다.

‘국가’라는 정의는 다양하고 여러가지 국가론이 있지만 현재 우리나라의 경우 훌륭한 국가를 만든다고 하면 남녀노소 누구든지 책임윤리를 가지고 정치인의 말과 행동에 관심을 가져야 한다고 생각합니다. 민주주의 정치제도의 핵심은 국민의 참여와 소통인데 만약 이 부분이 결여된다면 국민을 속이고 사리사욕만 챙기는 악인이 민주적 절차를 통해 당선되는 경우가 발생할 수 있으며, 또는 국가와 국민을 위해 일하는 선인을 온갖 권모술수로 방해할 수도 있습니다. 정치에 염증을 느껴 떠난 사람들, 하루 먹고 살기 바쁜 사람들, 정치에 관심이 없는 사람들이 점점 사회에 많아질수록 민주주의는 고대 그리스 때처럼 중우정치에 빠질 확률이 높아질 것입니다. 따라서 본인의 행동에 책임윤리를 가지고 자신이 국가의 주인이라는 인식을 가진다면 예를 들어 적어도 투표는 선택이 아닌 권리이자 의무로 임할 것이라고 생각합니다.

유시민 작가는 우리나라 민주주의를 후불제 민주주의라고 표현하였습니다. 충분히 일리가 있는 표현이라고 생각합니다. 4·19 혁명 때 거리에 쓰러졌던 청년과 학생들, 유신시대에 목숨을 잃거나 고문을 당했던 대학생과 종교 지식인들, 5·18광주민중항쟁 희생자들, 6월민주항쟁 때 최루탄과 경찰과 맞섰던 시민들, 광우병 촛불시위와 박근혜 대통령 탄핵 요구 촛불시위 등 민주공화국을 세울 때 미리 치르지 않았던 비용을 후불하였다는 이야기입니다. 안타깝게도 저는 개인적으로 노무현 참여정부 이후 진보정치의 무능력 및 책임회피과 시민들의 정치 무관심이 민주주의 국가시스템의 근본이 위협받는 상황까지 가게 만들었고 결국 촛불시위가 일어난 것이 아닌가?라고 생각합니다.

앞서 언급한 것처럼 민주주의 제도 하에서 훌륭한 국가로 나아가기 위해서는 모든 시민들이 국정에 관심을 가지고 적극적으로 참여해야 하는 것이 중요하다고 생각합니다. 그 결과, 정치인이 국민을 두려워하고 국민의 요구를 파악하면서 의지를 대표할 수 있도록 노력할 것입니다. 마지막으로 이 책에서 언급한 아리스토텔레스의 인용구로 끝맺도록 하겠습니다. “훌륭한 국가는 우연과 행운이 아니라 지혜와 윤리적 결단의 산물이다. 국가가 훌륭해지려면 국정에 참여하는 시민이 훌륭해야 한다. 따라서 시민 각자가 어떻게 해야 스스로가 훌륭해질 수 있는지 고민해야 한다.”

책: 여행의 이유(김영하 산문)

소설가 김영하의 여행, 그리고 여행을 바라보는 아홉 가지 이야기.

1장 추방과 멀미

첫 번째 이야기는 2005년 당시, 작가가 집필을 위해 중국으로 떠났지만 입국을 거부당하고 추방당했던 일화로 시작합니다. 매우 불운한 일로 생각할 수 있지만 이러한 흔치 않은 경험이 결국 좋은 이야기 소재가 되었다고 말하면서 ‘여행의 의미가 무엇인가?”라는 본질적인 질문으로 이어집니다. 그는 여행이란 “여행을 떠난 주인공이 여러 시련을 겪다가 원래 성취하고자 했던 것과 다른 어떤 것을 얻고 오는 것”이라고 말합니다. 여러가지 이야기로 예시를 보여주는데, 여행을 떠난 많은 이들이 여행을 마쳤을 때 본인이 원하던 외면적 목적 달성 여부와 관계없이 평소에 인식하지 못 했던 내면적 목표를 달성하는 경우가 많다고 합니다. 그러나 한편, 여행의 어원이 travail(고역)에서 유래된 점을 보면 20세기 이전의 사람들은 여행이란 고향에서 머물지 못 하고 타지를 떠돌아 다니는 고통스럽고 힘든 시련이라고 여겼을 것이라 생각합니다. 즉, 현재 우리는 지루한 일상을 떠나 새로운 것을 얻고 싶은 마음과 안정적이고 통제된 삶에서 위험한 변수를 피하고 싶은 마음이 서로 상존하고 있을지도 모릅니다.

2장 상처를 몽땅 흡수한 물건들로부터 달아나기

작가는 서두에 “나는 호텔이 좋다.”라고 말하면서 운을 뗍니다. 결론부터 말하자면 호텔에 머무는 동안에는 일상과 가족, 인간관계로부터 받는 상처와 피로로부터 벗어날 수 있기 때문입니다. 실제로 삶이 부과하는 문제가 크면 클수록 작가는 여행을 더욱 갈망하였다고 합니다. 필자도 일상에서 주어지는 문제에 도피하고 싶을 때 소설이나 영화 속 이야기를 상상하곤 하는데 아마도 비슷한 감정이지 않을까 싶습니다.

3장 오직 현재

사람들은 대개 과거를 후회하고 다가올 미래에 대해 불안감을 느끼며 살아갑니다. 여행은 그런 우리를 과거와 미래로부터 끌어내 현재에 집중하게 만든다고 합니다. 그 경험들 중 의미있는 것들을 생각으로 바꿔 저장하고 이로부터 영감을 얻습니다. 그래서 작가는 언제나 그 순간에 있었던 여행지보다는 집에 누워있을 때 영감을 얻는다고 합니다.

4장 여행하는 인간, 호모 비아토르

철학자 가브리엘 마르셀은 인류를 호모 비아토르(여행하는 인간)으로 정의하기도 했는데 인간은 끝없이 이동해왔고 그런 본능이 우리 몸에 새겨져 있다고 합니다. 1995년 전에는 전 세계적으로 여행 인구가 5억 2천만 명이었으나 인터넷 시대가 도래하면서 2016년에는 12억 4천만 명으로 두 배가 넘게 증가하였습니다. 여행은 피곤하고 위험하면서 비용도 많이 들지만 인류의 본능이 여행을 포기하지 않고 기술이 발전하면 할수록 더 많이 이동하는 것을 통계가 보여주고 있습니다. 어쩌면 인류가 여행이 선택이 아닌 필수라고 생각하는 날이 올지도 모르는 일입니다.

5장 알아두면 쓸데없는 신비한 여행

다섯 번째 이야기는 “알아두면 쓸데없는 신비한 잡학사전”에 출연한 김영하 작가가 독특한 화법으로 방송 경험을 풀어내는데 특히 프로그램 편집에 대해 바라보는 관점이 놀라웠습니다. 출연자들이 뿔뿔히 흩어져 각자의 여행을 다니고 저녁 식사 때 모여 본인들이 겪은 여행 이야기를 들려주는 방식인데, 편집하는 제작진들도 모든 여행을 리뷰할 수 없어 최종 영상을 통해 간접적으로 경험하게 된다고 합니다. 작가도 최종 편집본을 통해 간접적으로 다른 여행들을 체험하게 되는데 심지어 본인이 직접 다녀온 여행지조차 편집하는 사람의 느낌과 색깔에 영향을 받아 좀 더 깊이 있고 색다른 여행을 경험한다고 합니다. 즉, 최종 영상은 타인이 보여주고 싶은 여행의 정수만 골라서 체험할 수 있으면서 본인은 여행 과정에 수반되는 고통과 비용을 지불하지 않아도 됩니다. 이를 “방구석 여행자”라고 표현했는데 모두가 어느정도는 방구석 여행자이며 일인칭 시점으로 수행한 이 ‘진짜’ 여행은 다른 사람들의 경험과 생각이 함께 숙성되면서 우리의 여행이 좀 더 명료해진다고 합니다.

6장 그림자를 판 사나이

아델베르트 폰 샤미소의 “그림자를 판 사나이” 소설을 보면 주인공은 자신의 그림자를 신비한 인물(악마)한테 파는 대가로 무엇이든 꺼낼 수 있는 ‘행운의 자루’를 얻게 됩니다. 그림자라는 평소에는 신경도 쓰지 않는 것을 파는 대신 엄청난 부를 얻었지만 주인공은 곧 그림자가 인간에게 매우 중요하다는 사실을 알게 됩니다. 그림자가 없는 인간은 사회에 환대받지 못 하였고 결국 혼자가 되었지만, 우연히 어디든지 갈 수 있는 마법의 장화를 얻게 되면서 여행자로 살아가게 됩니다. 즉, 현실에서 여행자는 그림자가 없는 존재이기 때문에 타지에서 어떤 의무와 책임도 또한 어떤 소속감도 가지지 않습니다.

7장 아폴로 8호에서 보내온 사진

일곱 번째 이야기는 여섯 번째 이야기의 반전을 담아냈는데, 여행을 통해 얻는 또다른 기쁨은 타지에서 경험하는 환대라고 합니다. 지구라는 작은 행성에 같이 탑승하고 있는 승객으로서 모두가 동료이고 소중한 존재라는 관점에서 보면 곤란한 여행자를 도와주는 것은 선순환을 유발합니다. 인류는 오랜 세월동안 서로를 적대하고 살육해왔지만 한편으로 낯선 이들을 손님으로 맞이하고 절실한 것들을 제공하면서 떠나보내기도 하였습니다. 거의 모든 문명에, 특히 유목민들에게는 손님을 잘 대접하라는 계율이 남아있다고 합니다.

8장 노바디의 여행

실뱅 테송은 “여행의 기쁨”에서 괴테를 인용하는데 ‘여행은 여행자가 외부 세계에 감행하는 습격이며 , 여행자는 언젠가 노획물을 잔뜩 짊어지고 집으로 돌아가는 약탈자다’라고 언급합니다. 반면에 식사와 잠자리를 제공하면 고마워하며 소식이나 정보 및 선물 등을 주고 떠나는 이들도 있으므로 외부인은 위험하면서도 동시에 매력적이라고 표현합니다. 성숙한 여행자라면 자신을 타지의 상황에 따라 “섬바디(특별한 사람)” 혹은 “노바디(현지인 코스프레)” 중 하나를 선택해서 현명하게 대처하게 되는데 이는 인생을 지혜롭게 살아가는 방법이기도 합니다.

9장 여행으로 돌아가다

일상과 여행의 관계는 마치 현실과 소설의 관계와 같다고 합니다. 현실은 어지럽고 복잡하고 무질서합니다. 그러나 소설은 현실과 비슷한 일이 일어나지만 질서가 있고 통제가 가능합니다. 여행은 우리를 집중시키고 한 도시의 정수만을 맛보길 원하며 여행에서 보고 듣는 모든 것들이 유기적으로 연결되어 있다는 느낌을 받습니다. 여행은 시작과 끝이 분명하다는 점에서 소설과 닮았으며 설렘과 흥분 속에서 낯선 세계를 탐험하고 안전하게 출발점에 돌아옵니다. 작가는 자신의 정체성을 여행자로 규정할 수 밖에 없는 최종적인 이유가 여기서 두드러지는데 지루한 일상을 벗어나 세상을 다시 느끼고 정신이 한껏 고양된 상태로 돌아오면서 다시 일상을 여행할 수 있는 힘을 얻는다고 합니다.

한 마디로 말하라 – Mini Goss

우리는 전달하고자 하는 메시지를 언어를 이용한 문장을 통해 의사소통을 합니다. 우리는 이러한 메시지를 하루에도 수백, 수천 개씩 처리해야 하고, 서로의 메시지를 제대로 이해하지 못하면 오해, 논쟁, 결렬 등이 발생할 수 있습니다. 따라서 우리는 전달하고자 하는 메시지를 정확하게 파악하고 간결한 문장으로 전달하는 것이 중요합니다. 저자는 이 간결한 문장을 ‘결정적 한 마디’라고 말하고 있습니다. 결정적 한 마디는 맥락과 무관하거나 지나치게 복잡한 정보를 제거하여 우리와 청중이 중요한 메시지에 집중할 수 있도록 만들어 줍니다. 이러한 결정적 한 마디는 면접, 발표, 연설, 협상 등 공적인 자리뿐만 아니라, 일상적인 대화나 유머, 심지어 술자리 건배사 같은 사적인 자리에서도 효과적인 기술입니다. 이 책에서 설명하는 힘 있고 인상적인 결정적 한 마디를 만들기 위한 방법과 우리에게 도움이 될 수 있는 활용법을 설명하겠습니다.

힘 있고 인상적인 결정적 한 마디를 만들기 위해서는 우리가 전달하고자 하는 메시지를 사람(1~5), 행동(6~8), 드라마(9~11)으로 나누고, 다음과 같은 항목에 대한 정보를 체크합니다.

  1. 주제와 관계있는 사람은 누구인가?
  2. 메시지를 듣는 사람은 누구인가?
  3. 그들에게서 알고자 하는 것은 무엇인가?
  4. 그들은 당신에 대해 무엇을 알고 있는가?
  5. 그것을 묘사하는 방직은 어떠한가”?
  6. 전달하고자 하는 정확한 내용이 무엇인가?
  7. 당신에게 가장 중요한 행동은 무엇인가?
  8. 청중에게 가장 중요한 행동은 무엇인가?
  9. 메시지에서 가장 흥미로운 극적 요소는 무엇인가?
  10. 그 요소로 어떤 대화를 시작할 수 있는가?
  11. 서로의 목표를 함께 달성할 수 있도록 청중을 사로잡을 수 있는가?

체크했다면, 각 항목에서 가장 중요하다고 생각하는 단어들을 표시합니다. 이 단어들이 결정적 한 마디에 들어가야 할 핵심 단어들입니다. 그리고 자신의 목표와 청중의 목표 중 중복되는 것에 기반을 두고 핵심 단어들을 활용하여 결정적 한 마디를 구성합니다. 결정적 한 마디를 구성했다면, 구상한 문장을 직접 읽어봅니다. 만약 자신이 읽었을 때 어색하게 들린다면, 대화체로 바꿔주는 것이 좋습니다. 또한 가능한 청중들이 마음속으로 메시지를 그릴 수 있도록 구체적이고 시각적인 표현을 사용하고, 쉽게 이해하고 기억할 수 있도록 쉽고 매력적인 단어들을 사용하는 것이 효과적입니다.

이러한 과정을 통해서 결정적 한 마디하는 활용해서, 우리가 전달하고자 하는 생각을 효과적으로 전달하는 방법도 존재합니다.

<빙산분석법>
빙산 분석법은 청중들이 듣기 원하는 메시지를 찾아서 전달하는 것으로, 우리가 청중에게 전달하고자 하는 전체 내용을 바다에 떠 있는 빙산에 비유한 방법입니다. 우리는 빙산 전체를 알고 있지만, 청중은 수면위로 드러난 빙산의 꼭대기만 볼 수 있습니다. 따라서 우리는 빙산의 꼭대기를 결정적 한 마디를 활용하여 채우고, 수면 아래는 뒷받침하는 내용들을 중요도에 따라서 채워야 합니다.
빙산 분석법은 언론 기자들이 효과적으로 독자의 관심을 끌고, 정보를 신속하게 파악할 수 있도록 기사나 보도를 편집할 때 사용하는 방법입니다. 언론 기자들은 독자들에게 전달할 중요 내용을 빙산 꼭대기에 배치하고, 뒷받침하는 내용들을 중요도에 따라 배치합니다. 그리고 주어진 기사나 보도의 길이에 맞추기 위해, 중요도가 낮은 내용부터 잘라냅니다.

<5분 미팅법>
5분 미팅법은 짧은 시간 내에 결정적 한 마디에 집중 할 수 있도록 도와주는 훈련법으로, 상대가 5분 동안 자신의 생각을 설명하라고 요구했다고 가정하는 방법입니다. 우리는 상대가 집중할 수 있도록 상대가 원하는 내용을 세심하게 고려하고 열정적으로 이야기할 수 있도록, 상대의 의견을 반영할 수 있도록 결정적 한 마디를 수정해야 합니다. 결정적 한 마디를 수정하면서, 결정적 한 마디를 뒷받침 하는 2~3가지의 정보와 현실성을 부여할 수 있는 흥미로운 통계수치나 사례를 함께 준비하는 것이 좋습니다. 또한 우리는 항상 상대의 생각이 우리와 같지 않을 수 있다는 것을 명심하고, 그들이 제시하는 핵심적인 반론을 신중하게 경청하는 자세를 유지해야 합니다.

우리는 때때로 면접이나 발표, 논문의 초록 등 짧은 시간 동안 상대방의 관심을 집중 시켜 중요한 메시지를 전달해야 하는 상황을 마주하게 됩니다. 이러한 상황에서 우리는 결정적 한 마디를 활용하여 청중들에게 효과적으로 우리의 생각을 전달할 수 있다고 생각합니다.

영화: 미스트(The Mist, 2007)

당신이 알던 세상은 안개 속으로 사라진다.

소설이 원작인 SF 영화 ‘미스트’는 다소 식상?하고 근본 없는 SF 소재를 사용했지만 초점은 위기 상황에 직면했을 때, 고립된 사회에서 나타나는 인간의 다양한 모습들을 보여주는 철학적인 내용을 담았습니다.

어느 날 강력한 비바람이 몰아친 다음 날, 사람들은 이러한 재난을 대비하고 극복하기 위해 마트에서 생필품을 구입하고 있었습니다. 기이한 안개는 점차 마을을 향해 몰려오고 있었고 심지어 군인과 소방관, 경찰관들이 출동하는 사태가 발생하게 됩니다. 안개 속에서 도망친 한 노인이 피를 흘리면서 “안개 속에 무언가가 있다!” 라고 소리치면서 마트 안에 들어오게 되고 마트 밖은 앞이 아무것도 보이지 않는 안개 속에 갇히게 됩니다.

‘미스트’의 이야기는 안개 속에 갇힌 마트 안의 사람들이 문제를 어떻게 접근하고 해결하려는 부분에서 시작됩니다. 먼저 안개 속의 ‘괴물’의 존재를 믿지 않는 사람들(주: 변호사 브렌트 노턴)은 이성적으로 생각하라면서 마트 밖에 나갑니다. 그 후 돌아오거나 살아남았다는 장면은 나오지 않습니다. 군인들이 구출해주길 기다리는 남은 사람들은 주인공 데이빗의 말을 따라 마트 유리벽에 장벽을 쌓게 됩니다. 하지만 시간이 흐르면서 고립된 사람들은 점점 불안해지고 데이빗의 아이를 돌보시던 할머니 한 분이 수면제를 먹고 죽음을 택하는 경우도 발생합니다. 이러한 절망적인 상황에서 카모디 부인은 성경의 말씀을 악용하면서 선동을 일으켜 추종자들을 끌어들입니다. 주인공 일행은 카모디 부인 일행과 마찰을 일으키게 되고 결국 주인공 일행은 마트에서 빠져 나가기로 결정합니다. 마트에서 탈출한 후 차를 타고 안개에서 벗어나려고 시도했지만 차 연료가 다 떨어지자 데이빗은 최후의 선택을 합니다. 차 안에 남아 있는 인원들은 전부 데이빗 손에 죽게 되고 본인은 총알이 부족해 혼자 살아남아 차에서 내립니다. 그 순간 데이빗은 사람들을 구출한 군인들을 만나게 되고 마지막 장면 1분을 위해 이 영화가 존재한다는 말이 있을 정도로 현실?적이고 씁쓸한 결말로 막을 내립니다.

재난 또는 한 치 앞도 알 수 없는 상황을 상징하는 ‘안개’, 모든 종류의 인간을 반영한 하나의 고립된 사회를 상징하는 ‘마트’, 안개 속에 존재하는 위험요소인 ‘괴물’. 이 영화의 SF 요소는 단지 고립된 사회를 형성하기 위한 하나의 장치라고 생각되고 본질은 이러한 위기상황에 나타날 수 있는 인간의 선한 면과 악한 면 그리고 이성적인 면과 감성적인 면 등을 관람객의 입장, 즉 최대한 객관적인 입장에서 바라보라는 의미가 아닐까?라는 생각을 하였습니다.

화살촉 프로젝트나 마트에 고립된 군인 병사 한 명이 마녀사냥 당하는 장면 등 언급하지 않은 내용들이 많습니다. 이런 부분들은 영화를 보신 후 직접 판단해보시는 것을 권유합니다. 저는 영화 ‘미스트’에서 작가나 감독이 말하고 싶은 내용은 진짜 위기는 외부에 있지 않고 내부에 있다는 것과 어느 순간에도 ‘희망’을 잃지 말라는 것이 아닐까?라고 생각합니다. 비록 요즘 시대에 비해 조금 허술할 수 있는 SF 요소라는 점이 있지만 스토리텔링만큼은 전혀 식상하지 않고 현실적인 폭로를 담아낸 명작이라고 생각합니다.

책: 실용주의 프로그래머 – 앤드류 헌트, 데이비드 토머스

‘실용주의 프로그래머’는 전문 프로그래머들을 위한 조언들이 담긴 책입니다. 제가 대학원생 때 읽고 책의 조언들 중 몇 가지를 직접 실천해보면서 많은 도움을 얻었습니다. 총 70가지의 조언들이 담겨 있는데 여기에서 내용을 확인할 수 있습니다. 제가 실천했던 조언들 중 몇 가지만 살펴보겠습니다.

  • 11. DRY (Don’t Repeat Yourself) – 반복하지 마라.
  • 12. 재사용하기 쉽게 만들라.
  • 21. 명령어 셸의 힘을 사용하라.

연구하면서 반복적으로 하는 작업들이 있습니다. 대학원생 때 반복적으로 하던 작업들 중 이진 파일로 된 탄성파 자료나 속도모델 등에서 trace나 profile을 추출하는 작업, 지하 영상에 미분이나 라플라시안 필터를 적용하는 작업, 깊이에 따라 속도가 선형으로 증가하는 속도모델을 만드는 작업 등이 있었습니다. 그때 그때 코드를 새로 작성하거나 예전에 사용했던 코드를 수정해서 작업했었는데 이러한 반복 작업을 없애기 위해 명령어 셸에서 옵션만 바꿔가며 쉽게 재사용할 수 있는 프로그램들을 작성했었습니다. 그리고 그런 프로그램들을 모아 gpl 라이브러리라고 이름을 붙였죠. 주로 당시 사용하던 포트란 프로그래밍 언어로 프로그램들을 작성했는데, 명령어 셸에서 사용할 수 있도록 option parser도 만들고 파일 입출력도 많이 다루면서 프로그래밍 연습을 할 수 있었습니다.

  • 22. 하나의 에디터를 잘 사용하라.

리눅스 Command line 상에서 프로그래밍을 했기 때문에 당시 사용할 수 있는 에디터로 VimEmacs가 있었습니다. 둘 중 어느 것을 사용할까 비교해보다가 결국 어디에나 설치되어 있는 Vi(Vim)를 사용하기로 했고, 각종 명령어와 plugin들을 이용해 Vim 고급 사용법을 익혔습니다.

  • 23. 언제나 소스코드 관리 시스템을 사용하라.

당시에는 Mercurial을 선택해서 사용하다가 몇 년 전부터는 Git만 사용하고 있습니다.

  • 28. 텍스트 처리 언어를 하나 익혀라.

당시 포트란과 C 언어만 사용하고 있었는데, 이 책을 읽은 후 Ruby, Perl, Python 중 프로그래머를 행복하게 하자는 철학을 내세웠던 Ruby를 선택해서 공부하고 사용했었습니다. Ruby를 배워놓았던 것이 도움이 돼서 나중에 Ruby와 Seismic Unix를 이용해 Muting/Interpolation 스크립트도 작성할 수 있었습니다. 참고로 지금은 Ruby는 사용하지 않고, 과학/공학 라이브러리가 많은 Python을 주로 사용합니다.

위의 조언들 외에도

  • 20. 지식을 일반 텍스트로 저장하라.
  • 29. 코드를 작성하는 코드를 작성하라.
  • 36. 모듈간의 결합도를 최소화하라.
  • 49. 소프트웨어를 테스트하라.
  • 61. 수작업 절차를 사용하지 말라.
  • 68. 문서가 애초부터 전체의 일부가 되게 하고, 나중에 집어넣으려고 하지 말라.

등 다양한 조언들을 실천해보면서 프로그래밍 실력을 향상시킬 수 있었습니다. 우리가 전문 프로그래머는 아니지만 주로 프로그래밍을 이용해 연구를 수행하고 있으니 프로그래밍에 대해 공부하는 것도 많은 도움이 됩니다. 단, 이것 자체가 연구는 아니니 연구하는 중에 틈틈이 연습해보는 것이 좋겠죠.

책 : 아가씨와 밤 – 기욤 뮈소

“사랑하는 사람을 위한 행동”으로 만들어낸 완전범죄 이야기

기욤 뮈소의 새 소설 ‘아가씨와 밤’은 생택쥐페리 고등학교의 개교 50주년 행사에 25년 전 ‘빙카 사건’에 연관된 졸업생들이 참석하게 되면서 이야기가 시작됩니다. ‘빙카 사건’은 25년 전 학교의 모든 남학생들의 사랑을 독차지하던 여학생 ‘빙카 로크웰’이 학교의 철학 선생님 ‘알렉시 클레망’과 함께 사랑의 도피를 떠나 실종된 사건을 말합니다. 이 사건은 학교 내의 연극 동아리에서 연극 소재로 활용해 공연을 할 정도로 학교의 전설적인 이야기로 내려오고 있지만, 사건의 전말은 단순한 사랑의 도피가 아닌 살인과 사체유기로 물든 치정사건 이였습니다.

빙카 사건이 있던 25년 전 그 날, 주인공을 비롯한 주요 인물들은 각자 ‘사랑하는 사람을 위한 행동’ 이라는 의도를 가지고 행동을 합니다. 하지만 그 행동들의 결과, 빙카와 ‘알렉시 클레망’이 사망하게 됩니다. 그리고 살인 사건을 은폐하기 위해서 둘의 시체를 유기하고 사랑의 도피를 떠났다는 소문까지 만들어 냅니다. 이야기가 진행되면서 그 날 살해당한 ‘알렉시 클레망’이 완전히 무고한 사람이라는 사실을 알게 되지만, 이 소설의 마지막까지 주요 인물들은 사건이 밝혀서 자신들에게 올 피해와 빙카 사건의 복수를 하고 있는 사람을 찾으려고 할 뿐이였습니다. 심지어 주인공 유명 소설가인 토마는 모든 사건이 완전 범죄로 마무리 되자, ‘소설가의 특권’이라는 합리화와 함께 이 사건을 자신의 새 작품의 소재로 사용하는 등 뻔뻔한 모습을 보여주기까지 합니다.

이렇게 무고한 사람을 죽이고, 시신까지 유기한 범인들이 전혀 죄책감이나 후회를 느끼지 않는 모습을 보고, 저는 오랫동안 빙카 사건을 조사해왔던 기자 스테판이 마지막에 진실을 밝히면서 권선징악을 행하는 장면을 기대했습니다. 하지만 스테판은 토마의 부모님의 ‘사랑하는 사람을 위한 행동’이 빙카 사건을 얼마나 철저하게 완전범죄로 만들었는지를 깨닫게 되고 빙카 사건의 진실을 알리는 것을 포기하게 됩니다. 이렇게 완벽하게 무고했던 피해자 ‘알렉시 클레망’을 살해하고 시체를 유기한 범인의 처벌은 물론, 유족들에게 생사조차 알릴 수 없게 끝난 것이 매우 아쉬웠습니다. 그리고 살인을 저지른 자식을 지키기 위해 범죄를 은폐하고 빙카 사건의 복수자로부터 자식을 지키기 위해 싸우는 모습을 보고,
“그들의 행동을 올바른 모성애와 부성애의 모습으로 생각할 수 있을까?”
“만약 내가 그들의 입장에 있었다면, 지금처럼 그들의 행동을 비판할 수 있는 선택을 할 수 있을까?”
라는 두가지 생각이 함께 들었습니다.

개인적으로 아쉬운 점도 있었지만 다양한 인물의 관점에서 생각을 해 볼 수 있었고, 과거 기욤 뮈소의 작품들처럼 뻔한 러브스토리가 아닌 새로운 방식으로 써 내려간 소설이라는 생각이 드는 작품이었습니다.

Tip: Anaconda를 이용한 Intelpython과 TensorFlow (Intel MKL CPU version) 설치방법 – Windows 환경

현재 연구실에서는 머신러닝 관련 스터디를 진행하고 있습니다.
Hands on Machine Learning이라는 책으로 공부하고 있는데, 책의 중반부 부터 텐서플로(TensorFlow)를 활용하는 방법이 서술되어 있습니다.
우리 연구생 여러분들이 텐서플로를 쉽게 설치할 수 있도록 간단한 설치 가이드를 작성하고자 합니다.

참고 :
https://software.intel.com/en-us/articles/using-intel-distribution-for-python-with-anaconda
https://software.intel.com/en-us/articles/intel-optimization-for-tensorflow-installation-guide

Tensorflow는 CPU 버전과 GPU 버전이 있습니다. GPU 버전은 GPU를 이용한 병렬 연산을 지원합니다.
연구실에 있는 GPU 서버를 통해 계산할 때는 GPU 버전이 필요하겠지만, 지금은 공부하는 과정이므로 개인용 컴퓨터를 이용하는 것이 편리할 것 입니다. 따라서, CPU 버전으로 설치를 진행하도록 하겠습니다.

Tensorflow는 현재(19.01.27 기준) 파이썬 3.6 이하의 버전만 지원합니다. 현재 Anaconda 패키지는 파이썬 3.7 버전을 기준으로 배포되고 있습니다. 본 설치 가이드에서는 Intel python 3.6 버전을 아나콘다 환경에서 설치하여 텐서플로를 설치하도록 할 것입니다.

먼저 https://www.anaconda.com/download/ 에 접속하여 파이썬 3.7 버전을 설치합니다. (64-bit 권장)

Anaconda Prompt를 실행합니다.

conda update conda 를 입력하고 실행합니다. 업데이트 할 내용이 있으면 y 를 눌러 업데이트를 진행합니다.

conda config –add channels intel 를 입력하고 Enter를 누릅니다.
(add 앞에 – 2개 입니다 !)

필수 파일만 설치하려면 Core 버전을, 모든 패키지를 설치하려면 Full 버전을 설치하면 됩니다. Jupyter notebook 등의 패키지를 사용할 것이기 때문에, Full package를 설치하도록 하겠습니다. (코어 버전 설치 후 따로 패키지를 설치해도 됩니다.)
conda create -n idp intelpython3_full python=3 을 입력하고 실행합니다.
(코어 버전 설치는 위의 내용 중 full을 core로 바꿔주면 됩니다.)

설치가 완료됐으면 위의 메시지가 나타납니다. conda activate idp 를 입력하여 idp 환경을 활성화 시켜줍니다. 활성화가 됐다면 prompt 좌측의 (base)가 (idp)로 바뀌게 됩니다.
idp 활성화 후 python을 실행하여 Intel Python이 제대로 설치되었는지 확인합니다. 제대로 설치되었다면 exit() 를 입력하여 다시 밖으로 나옵니다.

마지막으로 conda install -c anaconda tensorflow-mkl 을 입력하여 텐서플로를 설치하도록 합니다.

Intel Python을 Full package로 설치했기 때문에 자동으로 Jupyter notebook이 설치되게 됩니다. Jupyter Notebook (idp)를 실행하여 텐서플로가 제대로 설치됐는지 테스트 해보도록 합니다.
(Windows 환경에서 위 이미지의 경로에 아이콘이 자동으로 설치됩니다.
C:\Users\계정이름\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Anaconda3 (64-bit)
아이콘을 찾기 힘들다면 시작메뉴에 등록이 되어 있을것입니다.)

Jupyter notebook에서 Tensorflow를 import하고 예제를 실행해보도록 합니다. 예제가 제대로 출력된다면 설치가 제대로 된 것입니다.
* Tensorflow를 import 했을 때 위처럼 경고 메시지가 나타난다면 h5py를 업그레이드 하면 메시지가 사라지게 됩니다. 아래 내용 참고

Anaconda prompt를 관리자 권한으로 실행해서, idp 환경을 activate한 다음 pip를 업그레이드 하고 h5py를 업그레이드 합니다.
conda activate idp
python -m pip install –upgrade pip
python -m pip install –upgrade h5py

(upgrade 앞에 – 2개 입니다!)

h5py를 업그레이드 하고 다시 Tensorflow를 import 하면 경고 메시지가 사라지게 됩니다.
이상으로 Windows 환경에서 Intelpython과 Tensorflow 설치 가이드를 마치도록 하겠습니다. 스터디에 도움이 되길 바랍니다.
수고하셨습니다 🙂

책: 소유냐 존재냐 – 에리히 프롬

우리는 자본주의 사회에 살고 있습니다. 자본주의 사회는 빚과 소비가 있어야 돌아가는 사회로, 생산자들은 곳곳에서 광고와 뉴스 등을 통해 사람들에게 필요한 또는 불필요한 재화와 서비스의 소비를 부추기고 있습니다. 자본주의 사회에서는 많이 벌어서 많이 소유하고 많이 소비하는 것이 행복한 삶이라는 것을 전제로 하고 있고, 각종 미디어의 영향에서 자유로울 수 없는 우리들은 별다른 생각 없이 위의 전제를 받아들이며 살아가는 경우가 많습니다. 하지만 이 전제는 잘못되었고 그에 따라 많은 사람들이 인간 소외로 고통을 겪고 있습니다. 인류 역사에 자본주의가 등장한 것은 얼마 되지 않았지만 우리는 자본주의에 너무 익숙해진 나머지 자본주의 생활 양식이 아닌 다른 생활 양식이 있다는 사실을 생각하지 못하고 살아갈 때가 많습니다. 책을 읽을 때의 장점 중 하나가 이렇게 평소 삶 속에서 생각하지 못하던 것들을 새롭게 깨달을 수 있다는 점입니다.

에리히 프롬은 이 책에서 많이 소유하는 것을 추구하는 삶 뿐 아니라 풍요롭게 존재하는 것을 추구하는 삶도 있다는 것을, 그러한 삶이 더 가치 있는 삶임을 일깨워줍니다. 자본주의의 소유하는 삶은 탐욕적으로 자신의 소유(재산, 명예, 권력 등)를 늘리고, 남들과 비교하여 자신이 우월하다는 데에서 행복을 발견하는 삶입니다. 반면에 존재하는 삶은 소유물에 집착하지 않는 삶, 기쁨에 차서 자신의 능력을 생산적, 능동적으로 사용하고, 사랑하고 나누며 베푸는 삶입니다. 소유하는 삶은 자신의 소유물로 자신의 가치를 매기고 소유물의 노예가 되는 삶이지만 존재하는 삶은 존재의 절대적 가치를 아는 삶입니다. 존재하는 삶이라고 해서 소유가 전혀 없는 것은 아니지만 존재하는 삶을 사는 사람은 자신의 소유물에 대해 집착하지 않고 소유로부터 자유롭습니다.

두 가지 생활 양식이 학생들의 실생활에서는 어떻게 나타날까요? 소유하는 삶에 길들여진 학생은 강의를 들을 때 잘 암기하여 좋은 성적을 거두는데 중점을 두지만, 존재하는 삶을 사는 학생은 강의 내용을 통해 새로운 생각을 하며 성장하는데 중점을 둡니다. 소유하는 삶의 학생은 책을 읽을 때 소설의 줄거리를 파악하고 철학 서적의 주요 사항을 뒤따라 암기하는데 중점을 두지만, 존재하는 삶을 사는 학생은 소설을 통해 인간의 본성을 통찰하고 철학 서적의 사상을 비판적으로 읽습니다. 소유하는 삶에서는 보다 많이 아는 것이 중요하지만, 존재하는 삶에서는 보다 깊이 아는 것이 중요합니다. 소유하는 삶에서 사랑이란 사랑의 대상을 구속하고 지배하여 소유하는 것이지만, 존재하는 삶에서의 사랑은 사랑의 대상을 배려하고 알고자 하며 소생시키고 생동감을 증대시키는 과정입니다.

우리 물리탐사 연구실이 존재하는 삶을 실천할 수 있는 공동체가 되길 바랍니다. 책 뒷부분에 가면 인간 성격 변화에 관한 거시적인 이야기가 나오지만 우리는 우선 작게 연구실에서 실천할 수 있는 부분을 생각해봅시다. 수업을 들을 때 시험 잘 보고 좋은 성적을 얻는 것도 중요하지만 수업을 통해 스스로가 성장하는데 중점을 둡시다. 연구하고 논문을 쓸 때 실적을 늘리는데 중점을 둘 것이 아니라 연구를 통해 새로운 것을 발견/발명하는 기쁨을 누리고 논문을 통해 사회에 기여한다는 생각으로 논문을 씁시다. 다른 사람과 경쟁해서 이기기 위해서가 아니라 어제의 나와 경쟁해서 더 성장하기 위해 노력합시다. 교수님 말이라고 절대적으로 받아들이지 말고 교수님도 틀릴 수 있으니 자신의 생각과 의견을 이야기합시다. 서로를 가족같이 여기고 자신이 좀 더 아는 것을 나누며 서로의 성장을 도웁시다. 연구실에서 보내는 시간을 학위를 위해 희생하는 시간이 아닌, 그 자체로 보람되고 행복한 시간으로 만들어갑시다. 연구실 생활을 통해 우리 모두의 존재가 좀 더 풍성해지길 바랍니다.

소개: 이종우

이름 : 이종우

저는 현재 탄성파 탐사 연구실에서 석사과정 중인 이종우입니다. 
학부 때 탄성파 탐사, 탄성파 자료 처리 수업을 재미있게 들어서 연구실에 들어오게 되었습니다. 연구실에 들어와서 프로그래밍을 접하게 되었는데 어려웠지만, 흥미를 많이 느꼈습니다. 탄성파 자료처리 이론들을 컴퓨터 프로그램으로 구현하는데 프로그래밍 지식뿐만 아니라 수학적인 지식도 많이 필요하여 쉽진 않지만 재미있게 하고 있습니다.
GPU를 사용해서 자료 처리하는 연구를 처음 접했을 때 OpenACC를 사용했는데, 같은 프로그램을 더 빨리 돌릴 수 있고 최적화를 어떻게 하는지에 따라서 성능이 더 향상되는 것에 큰 흥미를 느껴서 이후에도 병렬프로그래밍 관련 연구를 해오고 있습니다. 또한 파형 역산 시 최적화 관련 연구도 하고 있습니다.

현재는  Rapid Expansion method 연구를 하고 있습니다. 

요즘에는 Data science에도 관심이 있어서 kaggle을 하면서 공부를 하고 있습니다.

학력
2011.3. ~ 2017.8 부경대학교 에너지자원공학과 공학사