간단한 웹을 만들어야 하는데,

간단하게 데이터를 다뤄야 할 때 종종 언급이 되는 Redis에 대해서 살펴보려고 한다.

 

"Key-Value 형식의 in-memory 데이터베이스"

 

기존에 내가 알고 있는 Redis에 대한 정보인데

공식 홈페이지에서 다시 한 번 확인해봤다.

 

- https://redis.io/

 

redis.io

 

"The opensource, in-memory data store used by millions ..."

어?! 'database'라고 하지 않고 'data store'라고 설명을 하네?! 라고 느끼는 순간! 사이트 중간에 다시 설명을 해주고 있다.

 

"A vibrant, open source database"

 

뭐, 결국은 내가 알고 있던 "key-value 형식의 in-memory databse"가 맞기는 하지만

스스로는 "data store"라는 정체성을 더 소중히 여기는 것이 아닌가 싶다.

 

서론이 너무 길었는데,

Redis에 대해서 너무나 잘 설명해주고 있는 좋은 아티클 링크 공유하면서 서두를 마치고자 한다.

 

- 6편의 아티클로 Redis에 대해서 심도있게 다루고 있음

  . https://insanelysimple.tistory.com/343

 

- Redis에 대해 소개하면서 "Redis vs Memcached" 비교

  . https://kdhyo98.tistory.com/89

 

 

이제 본론으로 들어가봅시다~!!

 

 

[ Redis 맛보기 ]

 

0. Background

개인적인 취향일 수도 있겠지만,

S/W 개발을 위한 기본적인 환경은 Linux 기반이 좋다고 생각하기 때문에

이번 실습 역시 Linux 배포판 中 Ubuntu 운영체제에서 진행한다.

 

또한, 최근 유행하고 있는 MSA 기조에 맞춰서

Application의 구성은 Container를 기반으로 하며

가장 대중적인 Docker를 활용하도록 하겠다.

 

- 테스트 환경 (필자가 이하 내용을 진행한 환경)

  . Host OS : Windows 10 Pro 21H1

  . VM : VirtualBox v6.1.34 r150636 (Qt5.6.2)

  . Guest OS : Ubuntu 18.04.6 LTS

  . Docker version 20.10.17, build 100c701

 

역시 개인적인 취향이 듬뿍 들어 있는 방식이긴 한데,

Server를 운영할 때 패키지의 버전관리 측면과 더불어 폐쇄망에서의 제약으로 인해

패키지들을 설치 할 때 직접 다운로드 받아서 진행하는 것을 선호한다.

 

- Docker 설치

  . Ubuntu 16.04 / 18.04 : https://www.whatwant.com/entry/Docker-Install-Ubuntu-16041804-64bit-using-Download

  . Ubuntu 20.04 : https://www.whatwant.com/entry/Docker-Install-Ubuntu-Server-2004

 

 

위와 같이 환경을 제시하긴했지만,

Windows/macOS 환경에서도 docker를 사용하기 때문에 비슷하게 동작하지 않을까 한다.

 

 

1. Persistent Volume

Redis가 in-memory data-store 솔루션이지만,

안정적 운영을 위해 메모리에 있는 데이터를 디스크에 쓰는 2가지 옵션을 제공한다.

 

① RDB (Redis Database) : 지정된 시간 간격으로 스냅샷을 파일로 저장

② AOF (Append Only File) : 모든 작업을 기록, 서버가 시작할 때 이 기록을 읽어서 데이터 재구성

 

어떤 옵션을 사용하더라도 데이터 저장이 되는 곳이 필요하고

보다 수월한 백업 등의 작업을 위해 docker volume 공간을 따로 구성하도록 하겠다.

 

# 리스트 확인
$ docker volume ls

# 생성
$ docker volume create [name]

# 상세 조회
$ docker volume inspect [name]

volume

 

2. Redis Config

접근 가능한 IP를 지정하고, 인증을 위한 패스워드를 넣는 등의 환경 설정을 위한 config 파일을 작성해보자.

또한 config 파일은 host에서 관리할 수 있도록 하겠다.

 

# 어떤 네트위크 인터페이스로부터 연결할 수 있도록 할 것인지 관리 (여기에서는 Anywhere)
bind 0.0.0.0

# 사용 포트 관리
port 6379

# Master 노드의 기본 사용자(default user)의 비밀번호 설정
requirepass [사용하고자 하는 비밀번호]

# Redis 에서 사용할 수 있는 최대 메모리 용량. 지정하지 않으면 시스템 전체 용량
maxmemory 2gb

# maxmemory 에 설정된 용량을 초과했을때 삭제할 데이터 선정 방식
# - noeviction : 쓰기 동작에 대해 error 반환 (Default)
# - volatile-lru : expire 가 설정된 key 들중에서 LRU algorithm 에 의해서 선택된 key 제거
# - allkeys-lru : 모든 key 들 중 LRU algorithm에 의해서 선택된 key 제거
# - volatile-random : expire 가 설정된 key 들 중 임의의 key 제거
# - allkeys-random : 모든 key 들 중 임의의 key 제거
# - volatile-ttl : expire time(TTL)이 가장 적게 남은 key 제거 (minor TTL)
maxmemory-policy volatile-ttl

# DB 데이터를 주기적으로 파일로 백업하기 위한 설정입니다.
# Redis 가 재시작되면 이 백업을 통해 DB 를 복구합니다.

save 900 1      # 15분 안에 최소 1개 이상의 key 가 변경 되었을 때
save 300 10     # 5분 안에 최소 10개 이상의 key 가 변경 되었을 때
save 60 10000   # 60초 안에 최소 10000 개 이상의 key 가 변경 되었을 때

 

redis.conf

 

redis.conf

 

3. Redis Image

Redis의 공식 Image 중에서 사용하고자 하는 버전을 찾아보자

- https://hub.docker.com/_/redis?tab=tag

 

Redis Image

 

현재 시점에서는 v7.0.2 가 최신이다.

 

 

4. Run

이제 Redis를 실행시켜 보자.

 

$ docker run \
-d \
--restart=always \
--name=redis \
-p 6379:6379 \
-e TZ=Asia/Seoul \
-v /srv/workspace/redis/redis.conf:/etc/redis/redis.conf \
-v redis_data:/data \
redis:7.0.2 redis-server /etc/redis/redis.conf

 

docker run

 

잘 실행이 되었는지도 확인해 보자.

 

docker logs

 

 

5. Redis Client

Redis에서 실제 값을 입력 해보자.

Redis Client의 실행 명령어는 'redis-cli' 이다.

 

$ docker exec -it redis redis-cli

 

NO AUTH

 

어?! 키 값 저장이 안된다.

redis.conf 작성할 때 명시한 패스워드를 사용하지 않았기 때문이다.

 

패스워드를 넣어서 client를 실행하면 정상 동작 한다.

 

AUTH

 

키 값 저장 및 조회가 잘 되는 것을 볼 수 있다.

 

여기까지~

 

반응형

 

요즘 개발자는 당연하고,

디자이너나 기획자들도 git 사용은 필수인 시대가 되었다.

 

인공지능(머신러닝, 딥러닝) 관련해서

공부를 하려고 해도 `git`을 사용할 수 밖에 없다.

 

아니, 사실 솔직히 말하면 git이라기 보다는 `GitHub.com`을 사용해야 하는 것이지만,

그 기반을 이루고 있는 git은 이제 일반 상식이다.

 

조금만 공부하면 사용할 수 있긴 하지만,

제대로 사용하려면 정말 어렵기만한 도구가 바로 git이다.

 

하지만, 실수를 했을 때 되돌릴 수 있는 방법만 알고 있다면

무서워 할 필요가 없다.

 

그리고, 어려움을 느끼고 있는 우리를 대신해서 욕을 해주고 있는 사이트도 있다 !!!

  - https://ohshitgit.com/ko

 

oh shit git

정겹지 않은가?! 

 

 

 

말이 좀 거칠긴 해도,

설명해주는 내용은 정말 말 그대로 꿀팁이다 !!!

 

 

그런데,

회사에서 보기에는 조금 부담스러울 수도 있다.

 

그런 분들을 위해 정중한 표현을 하고 있는 사이트도 제공을 해준다.

  - https://dangitgit.com/ko

 

dangit

아주 정중하지 않은가?!

 

 

재미로만 느껴질 수도 있겠지만,

내용은 정말로 상당히 괜찮다.

 

각자의 git 생활에 도움이 되기를 기원하며 ...

반응형

 

회사에서 내부적으로 사용할 웹사이트가 필요할 때

다른 개발자들이 종종 리액트를 추천하곤 했고, 결국은 리액트로 만들었었다.

 

Long long time ago,

PHP / ASP / JSP 시절에 웹사이트를 만들었었던 나는 ...

 

"그게 대체 뭔데!?"

 

Kubernetes 공부하면서 동작 테스트를 위한 간단한 웹서버를 띄울 때

Node.js를 이용해 정말 간단한 웹페이지를 만들어 보면서

새로운 세계를 살짝 엿보기는 했었지만 ...

 

그러던 중 집으로 배달된 아름다운 책 한 권 !!!

 

표지

나처럼 리액트가 뭔지 모르는 초심자를 위한 책이다 !!!

거기에다가 무료 동영상 강의까지 제공 되다니 !!!

나를 위한 찰떡 궁합 !!!

 

목차

목차를 살펴보면,

정말 말 그대로 초심자를 위해 엄청난 고민을 했다는 것이 딱 느껴진다.

 

일단, 너무 많은 내용을 포함하지 않아서 부담감이 크지 않은 점이 너무 좋았다.

 

꼭 알아야할 기초 중심으로 설명해주면서

마무리로 미니 프로젝트를 하나 함으로써 정리를 할 수 있게 해주고 있다.

동영상 강의

이 책의 가장 큰 매력 ... 동영상 강의 !!!

 

아는 사람은 알고 있는 goormedu에서 찾아볼 수 있다.

  - https://edu.goorm.io/

 

goormedu

goormedu 사이트에서 '리액트'로 검색을 해보면

리액트 관련한 많은 강의를 찾아볼 수 있다.

 

'처음 만난 리액트(React) v2' 강의를 선택하면 된다!!!

 

처음 만난 리액트(React) v2

무료다!

 

강의 목차
강의

책 없이 강의만 봐도 충분할 것 같은 퀄리티다.

 

인프런에서도 강의를 볼 수 있다.

  - https://www.inflearn.com/course/처음-만난-리액트/

 

인프런

동영상 강의 내용은 같다.

 

인프런 강의

유튜브로도 바로 볼 수 있다.

  - https://www.youtube.com/c/소플TV

 

유튜브

동영상 강의의 컨텐츠 내용은 모두 같다.

각자 편한 방식으로 선택하면 된다.

 

유튜브가 접근성이 편리해 보이지만,

goormedu 또는 inflearn을 통해서 강의를 듣게 되면 진도 체크 같은 도움을 받을 수 있어서 좋다.

 

그러면, 이제 GitHub를 방문해보자.

  - https://github.com/soaple

 

GitHub

저자의 사진도 볼 수 있다! (어?! 훈남이시네!!!)

 

실습 코드

실습코드도 제공되니 이를 활용하면 보다 편하고 재미있게 공부할 수 있다.

 

 

다시 책 내용을 살펴보도록 하자.

 

각 장의 앞 부분에는 어떤 것을 공부할 것이라고 알려주는 Preview 내용이 있다.

 

Preview

장을 마칠 때에는 Summary로 정리까지 해준다.

 

마무리

개인적으로 이렇게 정리해주는 것을 정말 좋아한다.

 

작은 요소에 매몰되지 않고 전체적인 큰 그림으로 보면서

지금 무엇을 공부하려고 하는 지, 지금까지 무엇을 공부한 것인 지 알면서 공부하는 것이 정말 중요하다!!!

 

마지막으로 살펴볼 내용은 ...

리액트를 공부하기 위한 책인데, 리액트의 단점에 대해서도 설명해주고 있다.

 

리액트 단점 1

 

리액트 단점 2

 

단점을 설명하긴 했지만,

그렇다고 절대 리액트의 매력이 떨어진다고는 생각하지 않는다.

 

개인적으로 크로스-플랫폼 프레임워크로써 플러터(Flutter)의 세상이 오기를 기다리고 있는 입장이지만

최소한 아직까지는 리액트의 세상이기에~

 

 

책 내용을 살펴본 느낌을 적어보자면,

저자가 정말 많은 고민을 하고, 애정을 쏟아서 정성들여 만든 초급자를 위한 안내서라고 느껴졌다.

 

강의를 많이 하던 분이라거 그런지

내용 하나 하나가 직접 설명을 해야하는 책임감을 갖고 작성된 것 같았다.

 

리액트 초급자라면 정말 무조건 선택해야 하는 책이라고 추천하고 싶다!!!

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

Flutter는 Google이 출시한 Cross-Platform GUI Application Framework이다.

그냥 쉽게 말하자면, 소스코드 하나로 안드로이드, iOS, Web, Windows, macOS, Linux 어플리케이션을 만들 수 있는 것이다.

 

flutter

 

아직까지는 주로 안드로이드와 iOS 앱을 같이 만들기 위해 사용한다.

 

하지만, Flutter SDK만 가지고 가능한 것은 아니고,

Android Studio와 Xcode도 같이 필요하기 때문에

Windows 개발환경에서는 Xcode를 설치할 수 없어서 안드로이드 앱만 빌드 가능하고,

macOS 개발환경이어야지 안드로이드 앱과 iOS 앱을 같이 빌드 할 수 있다.

 

그러면 실제 코딩을 하는 IDE는 뭘 써야 할까?!

 

이론적으로 메모장으로 코딩을 해도 무관하지만,

IDE를 이용한 다양한 편의 기능을 위해 Android Studio 환경을 사용하는 것을 권장한다.

 

하지만, 왠지 쓰라는대로 쓰기에는 자존심이 상한다. (왜?)

 

우리의 만능 IDE 도구인 Visual Studio Code를 사용하면 안될까!?

 

된다 !

그것도 아주 잘 된다.

 

다만 몇 가지 Android Studio와 차이점이 있어서 좀 찾아보기는 해야 한다.

 

-----------------------------------------

 

Flutter 개발환경 구축하는 것은 아래 포스팅을 참고하도록 하자.

 

- Windows 환경에서 Flutter 설치하기 : https://www.whatwant.com/entry/Flutter-Install-Flutter-설치하기-Windows

- macOS 환경에서 Flutter 설치하기 : https://www.whatwant.com/entry/Flutter-Install-MacOS

- VSCode를 Flutter 개발환경으로 만들기 : https://www.whatwant.com/entry/Flutter-with-Visual-Studio-CodeVSCode

 

 

이번 포스팅에서 설명하고자 하는 것은 Flutter 신규 프로젝트를 생성하는 방법이다.

 

 

1. Organization 등록

  - 앱을 만들 때에는 앱의 고유 domain을 사용해야 한다.

  - 웹 주소가 반대로 되어 있는 형태로 사용된다 (예: com.whatwant.www)

    . 이 때, 'com.whatwant' 부분이 organization(또는 company) 영역이고

    . 'www' 부분이 앱의 명칭이 된다.

  - 신규 프로젝트(앱)을 생성하기에 앞서서 organization 정보를 미리 설정을 해놓지 않으면 나중에 엄청 귀찮다.

 

  - 'Preference - Settings' 메뉴를 실행하자.

Preference - Settings

  - 검색 필드에 'flutter create organization'을 타이핑 하면 검색된 설정 항목이 보인다.

  - 하단 링크로 보이는 'Edit in settings.json'을 클릭하자.

Edit in settings.json

  - 'dart.flutterCreateOrganization' 부분에 원하는 내역으로 입력하고 저장하면 된다.

organization

 

2. New Project

  - 이제 프로젝트를 생성하면 된다.

  - 'Command Palette (Command+Shift+p / Ctrl+Shift+p)'를 실행한 뒤

  - 'Flutter: New Project' 선택

Flutter: New Project

  - 프로젝트 유형으로는 'Application'을 고르면 된다 (앱 개발이 아니라면, 적합한 것으로 고르면 된다)

Application

  - 저장 위치는 프로젝트를 저장할 디렉토리가 생성될 위치를 고르면 된다 (프로젝트 디렉토리는 자동으로 생성한다)

select folder

  - 그리고, 프로젝트 이름을 지어주면 된다

project name

  - 'android - app - build.gradle' 파일을 열어보면

     앞에서 설정한 organization 이름과 프로젝트 이름이 잘 반영되어 있는 것을 볼 수 있다.

build.gradle

 

 

만약에 organization 설정을 미리 해놓지 않으면 어떻게 될까?!

'com.example'과 같은 기본값으로 반영이 되었을 것이다.

 

나중에 앱스토어 등에 등록하고자 한다면 문제가 될 것이다.

 

그러면, 수정을 해줘야 할텐데... 문제는 여러 곳에 있는 내용을 찾아서 전부 변경을 해줘야 하는 불편함이 발생한다.

물론, 하면 되는데 ... 깔끔하게 미리 설정해서 반영하는 것이 보다 편하지 않을까!?

 

반응형

DeepLearning 공부 내용을 GitHub로 관리하려다 보면 매번 수식 입력 부분 때문에 고생을 했었다.

GitHub의 MarkDown에서 기본적으로 수식 입력을 지원하지 않았기 때문이다.

 

그래서 보통은 Online Latex Equation Editor 사이트 등을 통해 수식 작성 후

이미지 파일로 다운로드 받아서 MarkDown에 입력하는 방법을 사용하곤 했다.

 

  - http://www.sciweavers.org/free-online-latex-equation-editor

 

 

수식을 깔끔하게 표현을 할 수는 있지만, 너무나 불편한 방식이다.

수식을 수정하려고 하면 다시 사이트에 가서 작성한 다음에 이미지로 만들고 업로드 하고...

 

그러던 중 반가운 소식이 들려왔다.

 

  - https://github.blog/2022-05-19-math-support-in-markdown/

 

 

우와~ MarkDown에서 수식 입력을 지원하다니 !!!

 

지원해주는 형식은 code block 방식과 inline 방식의 2가지 이다.

 

  - code block: 가운데 정렬로 수식만 단독으로 출력

  - inline: 텍스트 중간에 수식을 표현

 

수식 입력을 위해 사용되는 문법은 기본적으로는 Tex이다.

Tex를 사용하기 편하게 만든 매크로가 LaTex이기에 기본적으로 Tex 문법을 사용한다.

 

  - https://ko.wikipedia.org/wiki/위키백과:TeX_문법 

 

 

실제로 잘 되는지 살펴보자.

 

inline 방식으로 사용하려면 `$` 사이에 수식을 정의하면 되고,

code block 방식으로 사용하려면 `$$` 사이에 수식을 정의하면 된다.

 

 

이렇게 적어주면 아래와 같이 깔끔하게 잘 나오게 된다.

 

 

GitHub MarkDown에서 LaTex를 랜더링하기 위해 JavaScript 기반의 MathJax라는 오픈소스 프로젝트를 활용하고 있다.

그래서 아래와 같은 마우스 오른쪽 버튼 메뉴를 활용할 수도 있다.

 

 

 

보다 깔끔하고 편리하게 수식을 입력하고 활용할 수 있게 된 GitHub를 더 많이 사랑해줘야겠다.

 

반응형

'SCM > Git-GitHub' 카테고리의 다른 글

Meta의 Git 지원 버전관리 도구 Sapling 공개  (0) 2022.11.25
git 실수해도 괜찮아요  (0) 2022.07.02
Universe 2021 & GitHub Actions  (0) 2022.01.18
github.dev (Web-IDE)  (1) 2021.11.03
git switch/restore (git 새로운 명령어)  (1) 2021.10.17

 

cover

 

AWS에서 제공해주는 AI 서비스들을 어떻게 사용하는지

실제 시스템들을 구현해나가며 다양한 그림들과 코드들을 통해 친절히 설명해주는 책이다.

 

publish

 

이 책은 22년 4월에 출간한 따끈따끈한 책이지만, 원서를 찾아보니 2020년에 출시 된 책을 번역한 것이었다.

  - https://www.manning.com/books/ai-as-a-service

 

번역하면서 그동안 변경된 인터페이스들은 다시 스크린샷 뜨고 예제 코드도 손봤다고 하니

원서 출간일이 좀 되었다고 해서 걱정할 필요는 없을 것 같다.

 

reader

 

보면 알겠지만, 초보자를 위한 책은 아니다.

그리고 프론트엔드 개발자가 아닌 백엔드에 치우친 내용을 다루고 있는 책이다.

 

roadmap-1

 

roadmap-2

 

크게 3부분으로 나뉘어져 있으며

1부는 그냥 알면 좋을 내용들을 살짝 터치하면서 지나가는 내용이고

2부가 본격적인 내용들이고

3부는 앞에서 공부한 것들을 정리하는 느낌의 내용이다.

 

결론은 2부가 핵심!

 

Why

 

근본적인 질문인데,

왜 AWS AI 서비스를 가지고 이 책을 만들었는지에 대한 대답인데,

결론은 3대 Cloud 다 하면 좋았겠지만, 힘들까봐 가장 많은 사용자를 갖고 있는 AWS를 선택했다는.

 

AWS AI as a Service

 

AWS에서 제공해주는 AIaaS 플랫폼들을 보여주고 있는데,

사실 AI 관련된 것 뿐만 아니라

AI 서비스를 위한 시스템을 구축하기 위해서 필요로 하는 것들을 모두 보여주고 있는 것이 맞다.

 

AWS AI as a Service - color

 

이 책에서 아쉬운 점인데 (개인적인 취향이 많이 섞인)

manning에서 제공해주는 ebook을 보면 위 이미지와 같이 color로 나오는데, 보기에 훨씬 좋다.

이 책은 흑백이라서 좀 아쉽다.

 

grey

 

color

 

책에서 중요한 내용은 아니지만,

이런 사진들을 볼 때 흑백과 컬러의 차이는 극명하지 않나 싶다.

 

system

 

책에서 풀어가는 방식은 위와 같이

앞 부분에서 어떤 시스템을 만들고자 한다는 것을 설명해주고 시작한다.

 

arch

 

그리고 시스템 아키텍처를 보기 좋게 그림으로 표현해주어서

어떻게 구성이 되고 지금 어떤 것을 공부할 것인지 알 수 있는 점은 정말 좋은 것 같다.

 

 

총평을 하자면,

클라우드에서 제공해주는 다양한 서비스들, 특히 서버리스 서비스들을 활용해서

AI 서비스들을 어떻게 구성할 것인지 공부하고자 하는 분들에게는 정말 많은 도움이 될 것 같다.

어떤 신규 프로젝트를 진행할 때 프로토타입 또는 MVP를 만들어야 할 때에도 정말 좋을 것으로 생각된다.

 

주석이 충분하지는 않지만 제공되는 예제 파일도 있다.

  - https://github.com/hanbit/ai-as-a-service

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

 

제목 그대로

사용자 친화적인 케라스(Keras)로 딥러닝(Deep Learning)을 공부할 수 있는 책이다.

 

책표지

 

4월에 출간된 따끈따끈한 책이다.

 

발행일

 

책을 볼 때에는 새하얀 종이에 컬러풀한 인쇄로 보기에 아주 좋은데,

조명 아래에서 책 사진을 찍었더니 아래처럼 빛 반사가 좀 있다(사실 책 볼 때에도 조명 반사가 좀...).

 

구성 1

 

정말 친절하게도 책의 구성에 대해서 서술형으로 설명을 해주고 있다.

 

책의 목차만 가지고 전체적인 흐름을 파악하거나 각 챕터에 대해서 이해를 하기에는 어려울 때가 있는데

이렇게 친절하게 책의 구성에 대해서 이야기 해주는 것처럼 설명이 있어서 정말 좋았다. 

 

구성 2

 

책이 쉬운 것 같으면서도 어려운데,

신경망(Neural Network)의 전체적인 내용을 책 한 권에 모두 담고 있다보니 뒷부분은 사실 좀 어려웠다.

 

(사실 내가 딥러닝에 대해 깊이 알지 못하고 앞부분만 알고 있다보니 뒷부분이 마냥 어렵게 느껴졌을 것이다!)

 

신경망

 

처음에 책을 접했을 때 좀 당황했던 것이 "ANN"이라는 용어였다.

 

ANN (Artificial Neural Network, 인공신경망) 이라는 명칭은 보통

생물학적인 신경망, 즉 Neuron(뉴런)에서 영감을 얻어 발발된 통계학적인 학습 알고리즘을 지칭하는

일반적인 용어로 알고 있었다.

 

그런데, 이 책에서는 SNN(Shallow Neural Network, 얕은 신경망), 2-layer Neural Network,

또는 그냥 NN(Neural Network)이라고 부르는 제일 단순한 NN을 지칭하는 용어로 ANN을 사용하고 있다.

 

물론, 이런 내용은 책에서 잘 설명해주고 있다.

 

그리고 이론적인 내용도 너무나 잘 설명해주고 있다.

 

ANN

 

책에서 기대하는 대상 독자는 광범위 하다.

Deep Learning을 공부하는 모두가 대상 독자이다.

 

대상 독자

 

예제 소스 코드도 너무나 잘 제공해주고 있다.

 

   - https://github.com/jskDr/keraspp_2022

 

GitHub

 

책을 살펴본 개인적인 의견으로 말하자면,

이 책은 Deep Learning을 공부하면서 직접 코드로 구현을 어떻게 하는지 살펴보고 싶은 초급자에게 적합할 것 같다.

 

책도 그렇고, 제공해주는 예제 소스도 보면

옆에서 강사님이 친절하게 설명해주는 느낌처럼 쓰여져 있다.

 

이 부분이 어떤 용도인지 왜 그렇게 되는 것인지 설명해주듯이 쓰여져 있어서

혼자서 공부하기에 적합한 것 같다.

 

 

"한빛미디어 <나는 리뷰어다> 활동을 위해서 책을 제공받아 작성된 서평입니다."

 

반응형

내 M1 맥북을 개발용 장비로 자리잡도록 하기 위해 GPU 사용하는 Tensorflow 실행환경을 맞추고 싶어서 해봤다.

 

 

1. Xcode Command Line Tools 설치

  - 이미 Xcode를 설치했더니 에러 메시지가 나온다.

  - 기존에 Xcode를 설치하지 않은 분들은 "명령어 라인 개발자 도구"를 설치할 것이냐고 묻는 창이 나온다.

$ xcode-select --install

xcode-select: error: command line tools are already installed, use "Software Update" to install updates


$ xcode-select --version

xcode-select version 2395.

 

 

2. Miniforge3 설치

  - M1 맥북에서는 Anaconda 설치가 안되기에 Miniforge3를 설치하고자 한다.

  - https://github.com/conda-forge/miniforge

$ cd ~/Downloads

$ wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-MacOSX-arm64.sh

# wget 명령어가 안되면 `brew install wget` 실행
# 또는 그냥 Chrome에서 다운로드 받아도 됨

$ sh Miniforge3-MacOSX-arm64.sh

# 중간에 계속 `yes` 해주면 됨

$ conda info

 

  - 터미널(또는 iTerm2)를 재시작하면 커서 앞 부분에 `(base)`를 볼 수 있을 것이다.

 

[참고 #1] 쉘 실행할 때 자동으로 conda가 활성화 되는 것이 싫을 때에는 다음과 같이 설정하면 된다고 한다.

$ conda config --set auto_activate_base false

 

[참고 #2] 현재 conda env 목록을 확인하거나 실행중인 env를 끄고 싶을 때에는 다음과 같이 하면 된다.

$ conda env list

$ conda deactivate {envname}

 

 

3. 가상환경 만들기

  - 각자 원하는 경로를 준비한 뒤, 가상환경을 생성하면 된다.

$ cd ~/workspace
$ mkdir tensorflow
$ cd tensorflow

$ conda create -n tensorflow python=3.9

$ conda activate tensorflow

 

 

 

4. TensorFlow dependencies 설치

$ conda install -c apple tensorflow-deps

 

 

5. TensorFlow 설치

$ python -m pip install tensorflow-macos

 

 

6. TensorFlow-Metal (GPU framework) 설치

$ python -m pip install tensorflow-metal

 

 

7. TensorFlow 버전 확인

$ python

>>> import tensorflow
>>> tensorflow.__version__
'2.8.0'

 

 

8. Test

$ nano ./test.py
import tensorflow as tf

mnist = tf.keras.datasets.mnist

(x_train, y_train), (x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation='softmax')
])

model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)

model.evaluate(x_test,  y_test, verbose=2)
❯ python test.py

Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/mnist.npz
11493376/11490434 [==============================] - 3s 0us/step
11501568/11490434 [==============================] - 3s 0us/step
Metal device set to: Apple M1

systemMemory: 8.00 GB
maxCacheSize: 2.67 GB

2022-04-05 00:17:23.938189: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:305] Could not identify NUMA node of platform GPU ID 0, defaulting to 0. Your kernel may not have been built with NUMA support.
2022-04-05 00:17:23.938287: I tensorflow/core/common_runtime/pluggable_device/pluggable_device_factory.cc:271] Created TensorFlow device (/job:localhost/replica:0/task:0/device:GPU:0 with 0 MB memory) -> physical PluggableDevice (device: 0, name: METAL, pci bus id: <undefined>)
2022-04-05 00:17:24.494088: W tensorflow/core/platform/profile_utils/cpu_utils.cc:128] Failed to get CPU frequency: 0 Hz
Epoch 1/5
2022-04-05 00:17:24.640534: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.
1875/1875 [==============================] - 10s 4ms/step - loss: 0.2934 - accuracy: 0.9150
Epoch 2/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.1379 - accuracy: 0.9586
Epoch 3/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.1019 - accuracy: 0.9693
Epoch 4/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0832 - accuracy: 0.9739
Epoch 5/5
1875/1875 [==============================] - 8s 4ms/step - loss: 0.0715 - accuracy: 0.9780
2022-04-05 00:18:05.571816: I tensorflow/core/grappler/optimizers/custom_graph_optimizer_registry.cc:113] Plugin optimizer for device_type GPU is enabled.
313/313 - 1s - loss: 0.0806 - accuracy: 0.9743 - 985ms/epoch - 3ms/step

 

  - 뭔가 에러 메시지가 나와서 예쁘지는 않는데...  GPU는 사용하고 있다.

GPU

반응형

+ Recent posts