2017년 5월 22일 월요일

텐서 플로우 및 케라스 최신버전 설치 방법 (Windows 10)과 개념

이 글은 텐서플로우(Tensorflow) 1.1, 케라스(keras)를 윈도우 10 환경에서 설치하는 순서를 정리한다. 기타, 쥬피터 노트북에 사용되는 NumPy 같은 파이썬 라이브러리와 케라스 설치도 함께 다루겠다. 아울러, 텐서플로우에 추가된 연합 학습(federated learning) 기술, TF 명령어 등도 설명한다. 

참고로, 현재(2018.2.8) 시점에서는 1.5버전이 릴리즈되어 있다. 1.5버전 설치는 아래 순서는 동일하다. 다만, CUDA 설치 버전을 9.0으로 (9.1 최신버전이 아닌) 설치해야, 텐서플로우 1.5버전과 호환되는 CUDA라이브러리가 설치되는 것만 조심하면 된다.

텐서플로우 1.0 버전은 다음과 같은 성능 개선이 있었다.
  • 계산 속도 개선
  • tf.layers, tf.metrics, tf.losses 모듈 추가
  • 고급 신경망 네트워크 라이브러리인 Keras 라이브러리 호환
  • Python API를 NumPy와 유사하게 변경
  • 텐서플로우 도메인 컴파일러 XLS 개선
  • 텐서플로우 디버거(tfdbg)
  • 객체 인식 용 Android 데모 추가
  • Pyton 3 도커 이미지 추가
참고로, 우분투+NVIDIA+CUDA+텐서플로우 조합에 실패하였다면(우분투 16.04는 NVIDIA 드라이버 충돌 문제가 있다.ㅎ 테크트리 잘못타면 무한 로긴, 무한 blink screen 반복. NVIDIA의 OpenGL 라이브러리와 우분투 충돌문제 등 다양한 설이 있음), 윈도우 10 환경의 텐서플로우는 괜찬은 대안이 될 수 있다. 
참고로, 무한 로긴 및 반복 현상이 발생한다면, 로긴 화면에서 콘솔모드로 전환(ctrl+alt+F1 키)한 후 다음처럼 NVIDIA 그래픽 드라이버를 복구할 수 있다.

sudo apt-get purge nvidia-*
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-375


1. 개념
텐서플로우는 구글에서 발표한 오픈소스 기반 머신러닝 플랫폼이다. 텐서플로는 데이터 플로 그래프(data flow graph)를 사용해 수치연산을 한다. 그래프 노드는 수학 연산, 그래프 에지(edge)는 다차원 배열(tensor)를 정의한다. 그래프는 데이터와 알고리즘이 포함되어 있다. 그래프를 이용하면, 링크 간의 종속성을 이용해, GPU를 이용한 병렬처리를 할 수 있다. 머신러닝 딥러닝 내용은 다음 링크를 참고한다.
텐서플로우를 이용해 개발된 알고리즘은 텐서보드(tensorboard)를 이용해, 실행 상태를 가시화할 수 있다. 텐서플로 서빙(tensorflow serving)을 이용하면, 텐서플로에서 훈련된 모델을 이용해, 서비스를 운영할 수 있다.

우분투 환경에서는 텐서플로우 설치는 PIP를 이용해 다음처럼 상대적으로 간단하다.
$ sudo apt-get install python-pip python-dev python-virtualenv
$ virtualenv --system-site-packages ~/tensorflow
$ source ~/tensorflow/bin/activate
(tensorflow)$ sudo pip install --upgrade https://storage.googleapis.com/tensorflow/llinux/cpu/tensorflow-0.9.0-cp27-none-linux_x86_64.whl

윈도우 10환경에서는 다음 3가지 방법으로 텐서플로우를 설치할 수 있다. 
1. Docker for Windows 기반 텐서플로우 이미지 설치
2. Anaconda(아나콘다) 기반 텐서플로우 설치
3. 가상머신(VM, Hyper-V)에서 텐서플로우 설치

이 중에 상대적으로 설치가 간편한 아나콘다 기반 텐서플로우 설치를 한다. 컴퓨터는 NVIDIA GPU가 있다고 가정한다. 설치 방법은 다음과 같다. 

2. CUDA 8.0 설치
CUDA(Compute Unified Device Architecture)는 NVIDIA에서 개발한 GPU기반 병렬 계산 개발 플랫폼이다. 
아래 링크에서 CUDA 8.0 local 버전을 다운로드 받아 디폴트값으로 설치한다.

3. CuDNN 설치
CuDNN(CUDA® Deep Neural Network library)은 CUDA기반 딥러닝 라이브러리이다.
아래 링크에서 앞의 CUDA 8.0과 호환되는 CuDNN 버전을 다운로드 받고, 압축파일을 CUDA 폴더 아래에 덮어 써 준다. 참고로, 다운로드 받기 전에 회원가입 절차가 있다.

4. Python 3.5 설치
아나콘다 설치전에 Python 3.5를 설치해야 한다. 아래 링크에서 Windows x86-64 executable installer 설치파일을 다운로드해 설치한다.

5. 아나콘다 4.2 설치
아나콘다(https://www.continuum.io)는 Python언어 기반 수치 및 통계해석 패키지이다.
아래 링크에서 아나콘다 Anaconda3-4.2.0-Windows-x86_64.exe 파일을 다운로드해 설치한다.

6. 텐서플로우 설치
텐서플로우(https://www.tensorflow.org)는 구글에서 공개한 머신러닝 플랫폼이다.
텐서플로우를 설치하기 위해, 아나콘다 콘솔 메뉴(Anaconda Prompt)를 실행한다.
콘솔에서 아래 명령어를 차례대로 실행한다.
1) pip 업그레이드
python -m pip install --upgrade pip

2) Conda 환경 생성
conda create -n tensorflow python=3.5

3) TensorFlow 설치
activate tensorflow
pip install tensorflow-gpu

설치가 제대로 되면 다음 명령어로 설치된 버전을 확인할 수 있다.
pip freeze

IPython은 대화형 파이썬 노트북이다. 파이썬 입력 및 실행 결과를 대화형으로 손쉽게 확인할 수 있다. IPython 을 실행해 다음과 같이 'import tensorflow as tf' 를 입력한다. 아래와 같이 에러가 없다면 성공이다.

7. 텐서플로우 테스트
텐서플로우가 제대로 설치되었는 지 확인하기 위해, 다음과 같이 실행해 본다. 에러가 없다면, 정상적으로 설치된 것이다. 

python
>>> import tensorflow as tf
>>> print('TensorFlow version: {0}'.format(tf.__version__))
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print(sess.run(hello))

다음과 같이 출력되면 성공이다. 

8. 쥬피터 노트북 설치
쥬피터 노트북을 설치해 본다. 쥬피터 노트북은 IPython을 구동해, 입력된 파이썬 명령의 결과를 브라우저에 전달해 준다. 명령을 입력하고 실행결과를 확인하기 좋다.

아나콘다 콘솔에서 'conda install jupyter notebook' 명령을 입력해 설치한다. 

설치한 후 다음과 같이 jupyter notebook password 명령으로 쥬피터 노트북 암호를 설정한다. 

다음과 같이 jupyter notebook 을 실행한다. 

브라우저가 자동으로 실행되며, localhost:8888로 접속해, 다음과 같이 쥬피터 노트북을 구동한다. 

New 메뉴의 Python 메뉴를 클릭해 새로운 노트북을 생성한다. 그리고, import tensorflow as tf 명령을 입력한 후 Shift+Enter 를 입력해 실행한다. 에러가 없으면 성공한 것이다.

9. 파이썬 기타 라이브러리
개발을 위해 필수적인 파이썬 라이브러리를 미리 설치해 놓는 것이 좋다. 아나콘다 콘솔에서 차트, 표, 이미지 처리, 그래픽 가시화와 관련된 아래 패키지를 설치한다.
pip install numpy matplotlib pandas pillow graphviz

다만, scipy 는 윈도우10에서 pip install scipy 시 문제가 있을 수 있다. 이 경우, scipy 설치를 위해서 직접 다운로드하는 방법이 있다. 자세한 내용은 여기(How to get SciPy working in Windows, 2017.2)를 참고한다.
설치 후, 테스트를 위해, 쥬피터 노트북에서 New-Python 메뉴로 노트북을 만들고, 다음 코드를 실행해 본다.

import matplotlib
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 3*np.pi, 500)
plt.plot(x, np.sin(x**2))
plt.title('A simple chirp')
plt.show()

실행 결과가 다음과 같다면 성공한 것이다.

10. 케라스
만약, 시간이 좀 더 있다면, 아나콘다 명령창에서 tensorflow와 함께 쓰이는 keras(케라스)도 아래와 같이 설치하여, 공부해 보자.

1. CPU 버전 설치
conda install -c anaconda keras

2. GPU 버전 설치
conda install -c anaconda keras-gpu

케라스 소스와 예제는 다음 링크를 참고한다.
케라스를 설치한 후, 다음과 같이 LSTM 예제를 실행시켜 본다. 이상이 없으면 제대로 설치된 것이다. 

from keras.models import Sequential from keras.layers import LSTM, Dense import numpy as np data_dim = 16 timesteps = 8 num_classes = 10 # expected input data shape: (batch_size, timesteps, data_dim) model = Sequential() model.add(LSTM(32, return_sequences=True, input_shape=(timesteps, data_dim))) # returns a sequence of vectors of dimension 32 model.add(LSTM(32, return_sequences=True)) # returns a sequence of vectors of dimension 32 model.add(LSTM(32)) # return a single vector of dimension 32 model.add(Dense(10, activation='softmax')) model.compile(loss='categorical_crossentropy', optimizer='rmsprop', metrics=['accuracy']) # Generate dummy training data x_train = np.random.random((1000, timesteps, data_dim)) y_train = np.random.random((1000, num_classes)) # Generate dummy validation data x_val = np.random.random((100, timesteps, data_dim)) y_val = np.random.random((100, num_classes)) model.fit(x_train, y_train, batch_size=64, epochs=5, validation_data=(x_val, y_val))

케라스 실행 결과
11.PyTorch 설치
PyTorch(파이토치) 설치 방법은 다음과 같이 매우 간단하다.

conda install pytorch torchvision -c pytorch


부록: 텐서플로우 함수 요약
수학 연산. add, sub, mul, div, abs, mod, neg
배열. concat, slice, split, constant, rank, shape, shuffle
행렬. diag, transpose, matmul, matrix_determinant, matrix_inverse
신경망. softmax, sigmoid, ReLU, Convlution2D, MaxPool
세션. save, restore
큐잉/동기화. enqueue, dequeue, MutexAcquire, MutexRelease
흐름제어. merge, switch, enter, leave, NextIteration

부록: 연합 학습(Federated Learning)과 구글 텐서플로우 기반 파이프라인

1. 연합 학습의 탄생 배경과 필요성

전통적인 머신러닝은 대량의 데이터를 중앙 서버로 수집하여 모델을 훈련시키는 방식을 기반으로 한다. 그러나 21세기 들어 두 가지 거대한 흐름이 이러한 중앙집중식 접근법의 한계를 드러냈다. 첫째는 데이터 생성의 폭발적인 증가와 분산화이다. 수십억 개의 스마트폰, IoT 기기, 병원, 공장 등 데이터가 발생하는 '엣지(edge)'에서 직접 막대한 양의 데이터가 생성되기 시작했다. 둘째는 데이터 프라이버시에 대한 전 세계적인 인식 강화이다. GDPR(유럽 개인정보보호법), HIPAA(미국 의료정보보호법) 등 강력한 규제는 기업이 사용자의 민감 데이터를 임의로 수집하고 이전하는 것을 엄격히 통제한다.

이 두 흐름의 충돌은 "모델 성능을 높이려면 데이터가 필요하지만, 그 데이터를 중앙으로 합법적이고 효율적으로 옮길 수 없는" 딜레마를 낳았다. 연합 학습은 이 문제를 해결하기 위해 탄생했다. 데이터를 서버로 가져오는 대신, 모델을 데이터가 있는 곳으로 보내 훈련시킨다는 역발상을 통해 데이터 프라이버시를 원천적으로 보호하면서 분산된 데이터의 가치를 활용하는 길을 연 것이다.

연합 학습의 개념을 정립하고 대중화한 주체는 Google이다. 2016년경 Google 연구팀은 안드로이드 스마트폰 사용자의 타이핑 패턴을 학습하여 Gboard 키보드의 단어 추천 기능을 개선하고자 했다. 사용자의 민감한 대화 내용을 서버로 수집하지 않고 이 문제를 해결하기 위한 연구가 연합 학습의 시초가 되었다.

이 아이디어는 2017년 H. Brendan McMahan 등이 발표한 논문 "Communication-Efficient Learning of Deep Networks from Decentralized Data"를 통해 학계에 본격적으로 알려졌고, 이후 연합 학습은 프라이버시 보호 AI의 핵심 기술로 자리 잡았다.


2. 연합 학습의 핵심 동작 원리

연합 학습은 순차적이 아닌, 다수의 클라이언트가 참여하는 병렬적, 반복적 프로세스로 동작한다. 하나의 학습 라운드(Round)는 다음과 같은 단계로 구성된다.

  1. 선발 (Selection): 서버는 학습에 참여 가능한 클라이언트 중 일부 그룹을 무작위로 선발한다.

  2. 배포 (Distribution): 서버는 현재의 글로벌 모델을 선발된 모든 클라이언트에게 동시에 배포한다.

  3. 로컬 학습 (Local Training): 각 클라이언트는 배포받은 모델을 자신의 로컬 데이터로 학습시킨다. 이 과정은 다른 클라이언트와 독립적으로, 병렬적으로 수행된다.

  4. 보고 (Reporting): 학습을 마친 클라이언트는 업데이트된 모델 가중치를 서버로 전송한다.

  5. 종합 (Aggregation): 서버는 수집된 가중치들을 종합하여 새로운 글로벌 모델을 생성하고, 다음 라운드를 준비한다.


3. Federated Averaging (FedAvg)

서버가 여러 클라이언트의 학습 결과를 종합하는 가장 대표적인 알고리즘은 Federated Averaging (FedAvg)이다. FedAvg의 핵심은 각 클라이언트가 학습에 기여한 데이터의 양에 비례하여 가중치를 부여하는 가중 평균(Weighted Average)을 사용하는 것이다. 데이터가 많은 클라이언트의 학습 결과에 더 높은 영향력을 부여하여, 전체 모델이 더 많은 정보를 반영하도록 유도한다.


4. 기술적 과제와 방어 기법: 신뢰성 확보

4.1. 주요 위협: 모델 포이즈닝

연합 학습 환경은 신뢰할 수 없는 다수의 클라이언트가 참여하므로, 일부 악의적이거나 비정상적인 클라이언트가 오염된 데이터를 학습시켜 전체 모델을 망가뜨리는 모델 포이즈닝(Model Poisoning) 공격에 취약하다. 이는 글로벌 모델의 성능을 저하시키거나 특정 행동을 유도하는 백도어를 삽입하는 형태로 나타날 수 있다.


4.2. 서버 측 방어 기법

이러한 위협을 막기 위해 서버는 수집된 로컬 모델 가중치를 즉시 업데이트하지 않고, 품질을 검증하고 필터링하는 중간 단계를 거친다.

  • 로버스트 집계 (Robust Aggregation): 평균값이 이상치에 민감하다는 단점을 보완하기 위해, 파라미터의 중앙값(Median)이나 상하위 극단값을 제외하고 평균을 내는 절삭 평균(Trimmed Mean) 방식 등을 사용한다.

  • 유사도 기반 필터링 (Similarity-based Filtering): 정상 클라이언트의 모델 업데이트는 벡터 공간에서 서로 유사한 방향성을 가질 것이라는 가정에 기반한다. 서버는 수집된 모든 업데이트 간의 코사인 유사도(Cosine Similarity) 등을 계산하여, 다른 대부분의 업데이트와 동떨어진 방향을 가리키는 이상치를 식별하고 집계 과정에서 제외시킨다.


5. Google의 연합 학습 라이브러리: TensorFlow Federated (TFF)

5.1. TFF의 구조와 특징

TensorFlow Federated (TFF)는 Google이 개발한 연합 학습을 위한 핵심 오픈소스 라이브러리이다. TensorFlow 생태계와 완벽하게 통합되어 Keras 모델 등을 쉽게 활용할 수 있다. TFF는 두 가지 계층의 API를 제공한다.

  • Federated Learning (FL) API: 고수준 API로, FedAvg와 같은 이미 구현된 알고리즘을 쉽게 가져와 사용할 수 있다. 개발자가 연합 학습을 실제 문제에 빠르게 적용할 수 있도록 돕는다.

  • Federated Core (FC) API: 저수준 API로, 데이터와 연산의 위치를 직접 제어하며 새로운 분산 알고리즘을 연구하고 개발할 수 있는 유연성을 제공한다.


5.2. TFF 사용 방법: 단계별 예시

다음은 TFF를 사용하여 간단한 MNIST 이미지 분류 연합 학습을 수행하는 과정이다.

import collections
import numpy as np
import tensorflow as tf
import tensorflow_federated as tff

# 1. 연합 데이터셋 준비
# TFF는 실험을 위해 시뮬레이션용 연합 데이터셋을 제공한다.
emnist_train, emnist_test = tff.simulation.datasets.emnist.load_data()

# 클라이언트 1명의 데이터셋 구조 확인
example_dataset = emnist_train.create_tf_dataset_for_client(emnist_train.client_ids[0])
# print(next(iter(example_dataset)))

# 데이터 전처리 함수 정의
def preprocess(dataset):
    def batch_format_fn(element):
        # 이미지를 1차원으로 펴고, 라벨을 원-핫 인코딩한다.
        return collections.OrderedDict(
            x=tf.reshape(element['pixels'], [-1, 784]),
            y=tf.one_hot(element['label'], 10))
    return dataset.repeat(2).shuffle(100).batch(20).map(batch_format_fn)

# 전처리 함수를 적용할 수 있도록 연합 데이터셋을 변환
preprocessed_example_dataset = preprocess(example_dataset)
emnist_train = emnist_train.preprocess(preprocess)

# 2. Keras 모델 정의
# 일반적인 TensorFlow Keras 모델을 정의한다.
def create_keras_model():
    return tf.keras.models.Sequential([
        tf.keras.layers.Input(shape=(784,)),
        tf.keras.layers.Dense(10, kernel_initializer='zeros'),
        tf.keras.layers.Softmax(),
    ])

# 3. 모델을 연합 학습 프로세스로 변환
# TFF가 Keras 모델을 이해하고 연합 학습을 수행할 수 있도록 래핑(wrapping)한다.
def model_fn():
    keras_model = create_keras_model()
    return tff.learning.from_keras_model(
        keras_model,
        input_spec=preprocessed_example_dataset.element_spec,
        loss=tf.keras.losses.CategoricalCrossentropy(),
        metrics=[tf.keras.metrics.CategoricalAccuracy()])

# TFF의 내장된 FedAvg 알고리즘을 빌드한다.
# 이 한 줄의 코드가 서버-클라이언트 간 통신, 로컬 학습, 가중치 종합 등 복잡한 과정을 모두 포함한다.
federated_averaging_process = tff.learning.build_federated_averaging_process(
    model_fn,
    client_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=0.02),
    server_optimizer_fn=lambda: tf.keras.optimizers.SGD(learning_rate=1.0))

# 4. 연합 학습 훈련 실행
# 서버의 초기 상태를 만든다. (초기 글로벌 모델 가중치 포함)
state = federated_averaging_process.initialize()

# 5 라운드 동안 연합 학습을 실행한다.
NUM_ROUNDS = 5
for round_num in range(1, NUM_ROUNDS + 1):
    # 각 라운드마다 훈련에 참여할 클라이언트 일부를 샘플링한다.
    sampled_clients_data = [emnist_train.create_tf_dataset_for_client(client_id)
                          for client_id in np.random.choice(emnist_train.client_ids, size=10, replace=False)]
   
    # 훈련 프로세스의 다음 단계를 실행한다.
    # state와 클라이언트 데이터를 입력하면, 업데이트된 state와 라운드별 측정 지표(metrics)가 반환된다.
    state, metrics = federated_averaging_process.next(state, sampled_clients_data)
    print(f'round {round_num:2d}, metrics={metrics}')


연합 학습은 데이터 프라이버시와 분산화라는 시대적 요구에 부응하는 기술이다. 이는 단순히 분산 환경에서 모델을 훈련하는 것을 넘어, 신뢰할 수 없는 참여자들로부터 전체 시스템을 보호하는 강건한 통계적 검증 및 보안 메커니즘을 포함하는 기술이다. Google의 TensorFlow Federated와 같은 성숙한 오픈소스 프레임워크의 등장은 연합 학습의 도입을 가속화하고 있다. 연합 학습의 성공적인 적용은 효율적인 학습 알고리즘뿐만 아니라, 이처럼 신뢰성을 확보하기 위한 방어 기법의 성숙도에 달려 있다.


레퍼런스
이 글은 아래 사이트를 참고하였다. 
2. Jaejun Yoo, TensorFlow 설치
8. 윈도우(Windows) 환경에서 Docker를 이용해서 텐서플로우(TensorFlow) 설치하기
9. 윈도우 GPU tensorflow 설치 및 그래픽카드별 성능 비교
10. 병렬처리 – First Contact with TensorFlow
11. Deep Learning을 위해 어떤 GPU를 써야 할까?
12. 윈도우즈에 아나콘다, 텐서플로우 설치하기
13. GPU vs CPU benchmark (Adobe)
14. DIY GPU 서버 : 딥 러닝용 PC 직접 만들기
15. Ubuntu 17.04 Upgrade 및 WSL 잡담
16. 우분투 16.04에서 CUDA 성공적으로 설치하기(무한로긴 현상 발생하는 경우 있음)
17. Ubuntu 16.04 -17.04 NVIDIA drivers install is EASY
18. VI 에디터 사용방법
19. NVIDIA 그래픽 카드 설치 방법(상세)
20. CUDA Toolkit 9.0 Download
21. Tensorflow getting started 1.5
22. cuDNN Download
23. Installing Tensorflow on Ubuntu
24. How to benchmark your GPU on Linux

P.S. How to install tensorflow and keras on Ubuntu 16.04
GPU = GTX 1070 (note book)

1. install NVIDIA driver and CUDA 9.0
refer to No.16

2. if there is login loop, restore NVIDIA driver
sudo apt-get purge nvidia-*
sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt-get update
sudo apt-get install nvidia-384

3. install cuDNN for CUDA 9.0
4. install pip and tensorflow
5. install pyton library
6. install keras

2017년 5월 3일 수요일

우분투 14.04 LTS에서 16.04 LTS 업그레이드 이야기

5월초 가정의 달. 얼마전 큰 딸 영메이커 작업 때문에 구입한 보드 타다 다리 정강이 부러지는 바람에 6주 깁스 포함 3개월 재활 견적 나옴.. 아놔.. T.T... 어디 놀러도 못가고 애들과 하루 종일 집에만 있게 됨. 마침, 노트북에 설치된 우분투도 생각나고, 시간도 많기에 14.04 에서 16.04로 업그레이드 결정! (한시간이면 설치 끝나고 라떼 한잔하리라 예상^^)

기대와는 달리 다양한 문제 속출함.T.T;;; 구글링 한 테크트리를 정리해 놓는다. 제대로 된 아래 레퍼런스만 참고하였다.
터미널을 띄운 후 다음과 같이 명령을 입력한다. 

$ sudo update-manager -d

업그레이드 버튼을 다음과 같이 클릭한다. 

다음 명령을 실행한다. 설치 중간에 나오는 질문에는 'y'를 누른다.

$ sudo apt-get update && sudo apt-get dist-upgrade
$ sudo init 6
$ sudo apt-get install update-manager-core
$ sudo vi /etc/update-manager/release-upgrades

$ sudo do-release-upgrade -d
$ sudo init 6 


2. 우분투 새로 설치
새로 설치할 때, 로그인조차 안되는 경우가 종종있다. 대부분 그래픽 드라이버 오류이며, 다음과 같이 터미널에서 처리한다.

sudo apt-get update && sudo apt-get upgrade && sudo apt-get dist-upgrade && sudo apt-get install build-essential && sudo apt-get install linux-source && sudo apt-get install linux-headers-generic
sudo gedit /etc/default/grub #change line "GRUB_CMDLINE_LINUX_DEFAULT..."-line to
GRUB_CMDLINE_LINUX_DEFAULT="nouveau.blacklist=1 quiet splash nomodeset" #(forces low-level graphics to ensure putty does not give black screen)
sudo update-grub2
sudo apt-get remove nvidia* && sudo apt-get autoremove #ensures no former installation clashes with new install
sudo reboot

NVIDIA 카드에 맞는 드라이버 다운로드 후 리부팅한다.
“http://www.nvidia.com/Download/index.aspx?lang=en-us" (or search webb with “nvidia download”)

터미널에서 다음과 같이 처리한다.
sudo gedit /etc/modprobe.d/blacklist.conf #add these lines at the end:
blacklist vga16fb
blacklist nouveau
blacklist rivafb
blacklist nvidiafb
blacklist rivatv
blacklist lbm-nouveua
options nouveau modeset=0
alias nouveau off
alias lbm-nouveau off

Ctrl + Alt + F1 키를 입력해, 터미널모드로 부팅한다.
sudo service lightdm stop #stops graphic session to enable nvidiainstallation
cd Downloads #(or wherever you downloaded your nvidia-file)
sudo ./{the downloadedfilename.run} #follow installation-instructions (normally yes to all)sudo nvidia-xconfig #(if you did not chose “yes” to this in the installation”
sudo nano /etc/default/grub # change the "GRUB_CMBLINE_LINUX_DEFAULT..."-line to below:
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset”
sudo update-grub2 #update grub!
sudo reboot


3. NVIDIA GPU 드라이버 설치
모두 하라는 데로 다 설치했으나, 역시, 제대로 부팅되지 않고 에러가 잔뜩 뜬다. 본인의 경우에 무한 구글링을 통해, NVIDIA GPU 드라이버 설치 문제임을 발견(아.. 역시.. 불길한 예감이 든다). 차라리 USB 부팅해 새로 설치하려 하였으나, 멀티 부팅 GRUB 처리하는 것이 더 귀찬다는 사실 발견.. 다시 무한 구글링과 무한 리부팅(ㅎ 인내심 바닥)하다 테크 트리 해법 발견함.

1. GRUB로 리부팅
2. Highlight the Ubuntu option and press E.
3. Add nouveau.modeset=0 to the end of the line beginning with linux.
4. Press F10 to boot.

우분투가 부팅되면, 터미널에서 GPU 드라이버 설치한다. NVIDIA OpenGL 드라이버 충돌 문제(#1, #2)가 보고된 적이 있다. 혹시 모르니, 설치 중 OpenGL 설치 옵션이 뜬다면 no를 눌러주자.
$ sudo apt-add-repository ppa:graphics-drivers/ppa 

잘 가다가 '50unattended-upgrades.ucf-dist' in directory '/etc/apt/apt.conf.d/' as it has an invalid filename extension'에러 남. 이 파일을 rm 명령어로 삭제해 준다(참고 링크). 

$ sudo apt-get update
$ sudo apt-get install nvidia-367

에러 없이 설치된다. 재부팅하고, 우분투 로긴하면 업그레이드 성공. 그래도 하루만에 성공해서 기쁘다.ㅆ.



4. 기타 에러 처리
처음 우분투 설치시 ACPI FAIL로 설치화면까지 진입을 아애 못하는 경우가 있다. 이 경우, 다음과 같이 GRUB 명령 중 linux 명령 맨끝에 ACPI=OFF를 추가해 주면 된다.
관련 QA링크

다음과 같이 명령줄에서 변경해도 된다.
sudo nano /etc/default/grub
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash" to GRUB_CMDLINE_LINUX_DEFAULT="quiet splash acpi=off"


우분투 업그레이드 + 무한 구글링과 함께한 오늘의 교훈..

우분투 업그레이드 만만하게 보다가는 큰코 다침(고난의 행군).
진작에 15.04로 업그레이드할 껄...












2017년 4월 6일 목요일

종이 공작 - papercraft

이 글에서는 좋은 종이 공작(paper craft. 페이퍼 크래프트) 사이트가 있어 소개한다.
다음 사이트는 수많은 종이로 메이크할 수 있는 것들을 오픈 소스로 공개하고 있다.




종이 공작을 위해 필요한 준비물은 가위, 칼, 풀 정도 밖에 없다. 부모와 아이가 함께 만들며 좋은 추억을 쌓는 것도 좋을 것 같다.