공식 설치 메뉴얼: https://www.tensorflow.org/install/install_windows


TensorFlow 설치 전에 먼저 깔아야 하는 것들(Requirements)

- CUDA Toolkit 8.0

- cuDNN v6.1


주의할 점은 위 requirement들을 최신 버전으로 깔면 TensorFlow가 지원을 안함 ㅡㅡ;;

현재 CUDA 9.1과 cuDNN 7이 최신이라 홈페이지 메인에 떡하니 있는데, 좋다고 넙죽 받아서 설치하면 당연 안되고

꽁꽁 숨어있는 Legacy 다운로드 메뉴로 들어가서 굳이 구버전을 깔아야 함


CUDA Toolkit은 크기가 좀 커서 그렇지(1.5GB) 그냥 깔면 되고

cuDNN은 받아서 압축 풀면 dll이 튀어나오는데, 적절히 원하는 폴더에 넣고 환경 변수에 해당 경로를 박아야 함

예를 들어 C:\Program Files\cudnn 폴더 만들고 그 안에 cudnn64_5.dll를 넣었으면 그 경로를 %PATH%에 박고 재부팅ㄱ





TensorFlow가 잘 깔렸는지 확인하는 파이썬 스크립트:

https://gist.github.com/mrry/ee5dbcfdd045fa48a27d56664411d41c#file-tensorflow_self_check-py

[Sampling]

이 세상의 소리(Sound)라는 것은 아날로그이기에 Linear 하다.

그런데 컴퓨터는 디지털이므로 이 Linear한 소리를 Discrete 한 데이터로 변환해야 한다.

 

아날로그는 거의 무한대의 해상도를 가지므로 이것을 그대로 디지털로 표현하는 건 불가능하다.

따라서 그 일부분만 채취(샘플링)하여 최대한 원본과 유사한 디지털 데이터를 만들어야 한다.

이러한 과정 또는 행위를 샘플링이라 한다.

 

용어가 몇 개 있다:

(1) 샘플링 레이트(Sampling Rate) : 1초에 몇 개의 샘플을 추출할 것인지

(2) Bit Depth : 한 개의 샘플이 얼마만큼의 정확도/단계를 가지는지

 

샘플링 레이트가 높을 수록 아날로그와 유사한 모양의 데이터를 얻을 수 있다.

아래 그림은 샘플링 레이트에 따른 디지털 데이터의 모양을 나타낸다.

잘게 쪼갤 수록 아날로그의 것과 같이 부드러운 곡선이 되는 것(=원본에 가까움)을 확인할 수 있다.

 

더불어서 각 샘플(sample)이 표현할 수 있는 값의 범위를 sample size 라고 한다.

하나의 샘플이 0부터 1까지의 값을 표현할 것인데 이를 얼마나 정밀하게 표현할 것인가...

예를 들어 샘플 사이즈가 3 bit라면 8단계로 표현 가능할 것이다. (0.0, 0.125, 0.25, 0.375, ...)

(출처: http://www.morphfx.co.uk/music/edu-sampling.htm)

 

따라서 아날로그를 디지털로 샘플링 시 필요한 용량은 Sample Rate와 Sample Size의 곱이다.

 

예를 들어보자. 우리가 일반적으로 구입할 수 있는 음반 CD의 스펙은 44,100 Hz, 16-bit 이다.

이는 1초에 44100개의 샘플을 추출하고, 각 샘플의 크기는 16 bit 라는 것이다.

따라서 둘을 곱하면 705,600 bit가 1초를 표현하는 데 사용된다. (88,200 byte = 86.13 KB)

이론상 4분짜리 곡은 20.15 MB가 필요할 것이다. 실제로 WAV, PCM 등의 무손실이면 이 용량이 나온다.

 

 

[나이퀴스트 샘플링 이론(Nyquist–Shannon sampling theorem)]

왜 대부분의 MP3 파일, 혹은 하드웨어들이 44,100 hz 스펙을 가지고 있는지 대충 납득할 수 있다.

 

이 이론의 결론을 요약하면 다음과 같다:

A sufficient sample-rate is therefore 2B samples/second, or anything larger. 

충분한 샘플링 레이트는 대역폭의 두 배, 혹은 그 이상이다.

 

더보기

우선 앨리어싱(Aliasing)이라는 개념이 있다.

원본을 샘플링하여 새로이 구성된 데이터가 원본과 다를 때 발생하는 왜곡이나 아티팩트를 의미한다.

 

샘플링 레이트가 충분히 높지 않다면 샘플된 데이터는 원본 데이터를 충분히 표현하지 못한다. 당연한 말이다.

아래 그림은 벽돌 벽(원본)을 사진(샘플링)으로 촬영한 사진이다.

 

충분히 큰 해상도로 촬영하여, 벽돌의 규칙적인 모양을 잘 표현한 사진

  

낮은 해상도로 촬영하였기에 벽돌의 연속적인 패턴을 제대로 표현하지 못하는 모습

 

이 건물은 벽돌이 연속성을 가지고 배치되어 있다.

그런데 낮은 해상도로 사진을 찍을 경우 벽돌의 연속성을 제대로 표현하지 못하고 원본과 다른 왜곡된 모습을 표현하게 된다. 마치 시멘트가 좀 더 많이 발려진 것 같이 보인다.

 

이유는 갈색 벽돌 부분과 흰색 시멘트라는 두 요소를 조화롭게 샘플링해야 하는데

샘플링 비율이 한 쪽에 치우치게 되면 원래의 모양이 왜곡된 것처럼 보이는 것이다.

 

그런데 무조건 이 문제가 생기는 것은 아니고...

정말 재수가 좋아서 원본의 특징점을 잘 샘플링 할 경우... 딱히 문제가 없을 수도 있다.

혹은 눈속임으로 샘플들 사이를 비벼버리는 테크닉도 있다. (anti-aliasing)

 

시그널 프로세싱은 이러한 아다리를 지향한다고 할 수 있다.

어떻게 하면 최대한 적은 샘플링으로 원본의 특징을 그대로 살릴 수 있을지...

이와 관련하여 나이퀴스트는 Aliasing이 발생하지 않는 샘플링 레이트를 대역폭의 2배라고 제시한 것이다.

 

관련해서 자세한 내용은 관련 논문 참고:

http://medialab.sjtu.edu.cn/teaching/DIP/Projects/chapter_bas/ShannonTheoremTutorial.pdf

 

사람이 소리로 들을 수 있는 가청 주파수의 범위는 20~20,000 Hz 으로 알려져 있다. (나는 16,000 까지밖에 안들리던데...)

즉 데이터의 대역폭이 20 KHz라는 것인데, 이를 왜곡(Aliasing 등) 없이 샘플링 하려면

대역폭의 2배인 40 KHz 샘플링 레이트 이상으로 샘플링 해야한다는 이론이다.

 

하지만 이론상의 최소 요구가 2배라는 것이고, real-world에서는 8배 정도가 안전하다는 얘기를 엔지니어들이 종종 한다.

그렇기 때문에 192 kHz 까지 사용하는 Hi-Fi 업계가 존재하는 것으로 보인다.

 

현재는 44,100Hz와 48,000Hz가 범용적으로 가장 많이 사용되고 있다.

44,100hz : 25FPS PAL, 30FPS NTSC

48,000hz : 29.97FPS NTSC

 

 

 

[Sources]

https://en.wikipedia.org/wiki/Sampling_(signal_processing)

https://en.wikipedia.org/wiki/Nyquist%E2%80%93Shannon_sampling_theorem

https://en.wikipedia.org/wiki/Aliasing

최근 서버가 자꾸 shutdown 되는 상황이 발생하여 로그를 살펴보았습니다.

사용중인 운영체제는 CentOS 7 64비트입니다.


cat /var/log/messages | grep 'System is powering down.'


불규칙적으로 서버가 꺼지는 현상이 발생했는데, 신기하게도 비정상 종료가 아니라 정상 종료(Shutdown)였습니다.

파워나 보드 등의 부품 문제로 인한 갑작스런 전원 종료는 아닌 것입니다.


누군가 리눅스를 일부러 끄고 있다는 생각이 들어 해킹을 의심했으나, 로그에서 다음과 같은 부분을 발견했습니다.


Jan 10 22:23:31 localhost systemd-logind: Power key pressed.

Jan 10 22:23:31 localhost systemd-logind: Powering Off...


놀랍게도 전원 버튼이 눌려 시스템이 꺼지고 있었습니다. 그런데 주변에 물어봐도 아무도 누른 사람이 없습니다.

이 상태로 한 2주 지나니까 이젠 시스템을 켜면 3초 안에 자동으로 꺼집니다. 그리고 다시 알아서 켜지고, 반복됩니다.


전원 버튼 고장으로 결론을 내릴 수밖에 없는 상황입니다.


그런데 이미 제 TS140은 구입 후 1년이 경과하여 무상 RMA 불가하고, 해외 수입 제품이므로 국내 유상 A/S도 불가능합니다.

TS140 Front Bezel을 구입하여 교체하면 되지만 일단 당장 서버를 살리고 봐야 하니 나중으로 미룹니다.



메인보드의 우측하단에 전면부 패널과의 연결 케이블이 있습니다.

이 케이블을 Plug-Out 하였더니 시스템이 꺼졌다 켜졌다 하는 일은 사라졌습니다.

아무래도 전원 버튼 고장이 확실해 보입니다.



그런데 전원 버튼 연결선을 뽑아버렸으니 컴퓨터를 켤 방법이 없어졌습니다.

전원 시그널 핀 2개를 드라이버로 쇼트 내면 켜지긴 합니다만, 이걸 매 번 옆커버 따서 할 수는 없는 일입니다.



그래서 꼼수를 써 봅니다. 부팅 시 F1을 눌러 CMOS를 들어가면 파워 설정이 있습니다.

이 중에서 '전원 케이블이 연결되면 자동으로 시스템이 켜지도록' 하는 옵션이 존재합니다.

이 옵션을 ON으로 하여, 전원선을 뽑았다 꽂으면 시스템이 켜지도록 하였습니다.



전원을 끄는 것은 문제가 없습니다. 리눅스에서 shutdown 명령어로 종료하도록 합니다.



일단 이렇게 조치하여, Front Bezel이 도착할 때까지는 운영이 가능하겠습니다.

+ Recent posts