2024년 4월 14일 일요일

tensorflow gpu 사용하기에서

 tensorflow 설치시 주의해야 한다.

# Anything above 2.10 is not supported on the GPU on Windows Native
python
-m pip install "tensorflow<2.11"
# Verify the installation:
python
-c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

2024년 4월 현재 윈도우에서는

pip install "tensorflow<2.11" 로 설치해야 한다.

import os, sys
os.environ["CUDA_VISIBLE_DEVICES"] = "0"

한다음 import tensorflow as tf 로 불러와야 한다는데.....





그런데 막상 실행해보니 
import os, sys
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"

로 설정하면 처리속도가 빨라진다.








vscode로 맥에서 윈도우 노트북에 원격접속하여 파이썬개발하기

 맥에서 파이썬코드를 개발하려고 할때 어려운 점은 GPU를 사용할 수 없다는 것이다. 물론 이전 포스팅에서처럼 파이썬3.8을 이용하면되는데 오히려 속도가 더 느려진다.

이를 해결하기위하여

1. Colab등 유료 클라우드에 유로로 가입하여 GPU를 할당받아 사용하면되는데, 이게 시간에 제약을 많이 받는다. 예를 들어 어느정도 사용하다보면 추가 머신할당 결재를 요구한다는 것이다. 그리고 돌아보면 그리 속도향상이 되지 않는다.

2. 맥에 외장 eGPU를 설치하면 도움이 된다고 하는데 막상 비용이 만만찮고, 맥환경에서는 잘돌아가는지도 의문스럽다. 물론 인텔 맥에서 부트탬프로 윈도우를 설치하면 잘 지원이 된다고 한다. 그래서 이것도...

3. RX-4090 Laptop용 NVIDIA그래픽 카드가 장착된 노트북(저의 경우는 마침있음)에 맥에서 원격연결용 앱으로 접속하여 원격으로 가상환경을 설정하고 편집하고 실행하면 상당히 속도가 개선됨을 알 수 있다. 

이 노트북은Auto1111 stable-diffusion-webui 로  AI이미지생성을 위해 마련한 것이다(--listen). 

다만 아쉬운 점은 화면의 폰트가 윈도우용 폰트여서 그리 예쁘지 않고, 가독성도 떨어진다.

4. 그래서 선택한 방법으로는

    1) 위에 말한 GPU가 설치 노트북에 SSH서버를 설치하고

    2) 맥의 vscode에 ssh client를 설치한다음

    3) 원격 연결하는 것이다.

    4) 첨부한 이미지 처럼 가독성이 좋은 화면을 볼 수 있다.

5. 참고로 이 화면은 맥화면을 캡춰한 것이다.



2024년 4월 10일 수요일

LSTM 에서 model.train_on_batch(xs, ys) 와 model.reset_states()

 Python3.8 에서 돌아가는 TensorFlow 2.6 이전버전에는

# 모델을 정의합니다.
model = keras.Sequential([
keras.layers.LSTM(128, batch_input_shape=(1, 1, 45), 
        return_sequences=False, stateful=True),
keras.layers.Dense(45, activation='sigmoid')])


한다음
# 모델을 컴파일합니다.
model.compile(loss='binary_crossentropy', optimizer='adam'
    metrics=['accuracy'])


# 최대 100번 에포크까지 수행
for epoch in range(irepeat):
model.reset_states() # 중요! 매 에포크마다 1회부터 다시 훈련하므로 상태 초기화 필요
for i in range(train_idx[0], train_idx[1]):
xs = x_samples[i].reshape(1, 1, 45)
ys = y_samples[i].reshape(1, 45)
loss, acc = model.train_on_batch(xs, ys) # 배치만큼 모델에 학습시킴

와 같이 하면 가능했으나

Python3.10에서 돌아가는 TensorFlow 2.6 부터는

Unrecognized keyword arguments passed to LSTM
    {'batch_input_shape': (1, 1, 45)}

라고 에러를 쏱아낸다.
batch_input_shape 를 input_shape 로 고쳐도 안된다.

# 최근 TensorFlow 버전에서 Sequential 객체에는 reset_states 메서드가 없습니다.
# 이 메서드는 TensorFlow 2.6 버전에서 제거되었습니다.
# 대신 다음과 같은 방법으로 상태를 초기화할 수 있습니다:
# tf.compat.v1.reset_default_graph() 사용:
# 이 함수를 호출하여 그래프의 상태를 초기화할 수 있습니다.


model = Sequential()
model.add(LSTM(512, activation='tanh',
input_shape = (1, 45),
return_sequences = False, stateful=True))
model.add(Dense(n_features, activation='relu'))
model.compile(optimizer = 'adam', loss='mse', metrics=['accuracy'])


class end_epoch(tf.keras.callbacks.Callback):
def on_epoch_end(self, epoch, logs):
tf.compat.v1.reset_default_graph()

history =model.fit(x=X_samples, y=y_samples, batch_size=1, epochs=250
validation_split=0.15, verbose=1, shuffle=False
callbacks=[end_epoch()])

과 같은 방법으로 해결하여야 한다.

델파이 12.1이냐 11.3이냐?

 델파이가 12.1이 나왔습니다. 혹시 11.3버전의 커뮤니티버전이 필요하시는분이 있을 수 있을 것 같아 https://altd.embarcadero.com/.../RADStudio_11_3_esd_28... 와 이것 찾느랴 엄청고생함.