2024년 6월 7일 금요일

Intel Mac torch(인텔 맥에서 파이토치)사용시 에러중


을 따라하다가

TypeError:
Cannot convert a MPS Tensor to float64 dtype as the MPS framework 
    doesn't support float64. Please use float32 instead.

def evaluate(length):
input = torch.tensor(data_train[-24*7*2:]).reshape(1,-1,1).\
        to(device).float().to(device)
output = torch.tensor(data_train[-1].reshape(1,-1,1)).float().\
        to(device)
model.eval()
for i in range(length):
src_mask = model.generate_square_subsequent_mask(input.shape[1]).to(device)
tgt_mask = model.generate_square_subsequent_mask(output.shape[1]).to(device)

predictions = model(input, output, src_mask, tgt_mask).transpose(0,1)
predictions = predictions[:, -1:, :]
output = torch.cat([output, predictions.to(device)], axis=1)
return torch.squeeze(output, axis=0).detach().cpu().numpy()[1:]


result = evaluate(24*7)
result = min_max_scaler.inverse_transform(result)

--------------------------------------------------------------------------- TypeError Traceback (most recent call last) Cell In[29], line 1 ----> 1 result = evaluate(24*7) 2 result = min_max_scaler.inverse_transform(result) 3 real = rawdata["평균속도"].to_numpy() Cell In[28], line 2 1 def evaluate(length): ----> 2 input = torch.tensor(data_train[-24*7*2:]).reshape(1,-1,1).to(device).float().to(device) 3 output = torch.tensor(data_train[-1].reshape(1,-1,1)).float().to(device) 4 model.eval() TypeError: Cannot convert a MPS Tensor to float64 dtype as the MPS framework
     doesn't support float64. Please use float32 instead.


에러가 발생하여


def evaluate(length):
input = torch.tensor(data_train[-24*7*2:]).reshape(1,-1,1).\
        to(torch.float32).to(device)
output = torch.tensor(data_train[-1].reshape(1,-1,1)).float().\
        to(device)
model.eval()
for i in range(length):
src_mask = model.generate_square_subsequent_mask(input.shape[1]).\
            to(device)
tgt_mask = model.generate_square_subsequent_mask(output.shape[1]).\
            to(device)

predictions = model(input, output, src_mask, tgt_mask).transpose(0,1)
predictions = predictions[:, -1:, :]
output = torch.cat([output, predictions.to(device)], axis=1)
return torch.squeeze(output, axis=0).detach().cpu().numpy()[1:]

이렇게 수정하니 정상으로 실행이 되었습니다.(2024.6.7)

즉 .to(device).float().to(device) => .to(torch.float32).to(device)

아! 인텔맥을 살까 M1 맥을 살까 고민하다 부트캠프 때문에 인텔맥을 선택한 아쉬움....

2024년 5월 25일 토요일

pip 버전경고

 pip 는 python 2.x을 위한 것이고 pip3는 python 3.x를 위한 것입니다.

Mac에는 시스템관리를 위하여 기본으로 예전에는 python2이 설치되어 있었습니다.

그러난 맥버전업의 결과 최근에는 python3.8이 기본으로 설치되어 있습니다.

그런데도 pip 명령은 실행됩니다.

~ % pip install numpy
Collecting numpy
Downloading numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl.metadata (5.6 kB)
Downloading numpy-1.24.4-cp38-cp38-macosx_10_9_x86_64.whl (19.8 MB)
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 19.8/19.8 MB 9.1 MB/s eta 0:00:00
Installing collected packages: numpy

pip 와 pip3를 샐행해보면 같은 결과가 나옵니다.

~ % pip list
Package Version
---------- -------
numpy 1.24.4
pip 24.0
setuptools 68.2.2
wheel 0.41.3
~ % pip3 list
Package Version
---------- -------
numpy 1.24.4
pip 24.0
setuptools 68.2.2
wheel 0.41.3

그래서 별의미 없이 pip와 pip3를 혼용하여 사용해왔었는데.

가상환경을 만들어 그곳에서 살펴보니

~/venv310 % cd /Users/venv312
/Users/venv312 % source bin/activate
(venv312) /Users/venv312 % pip list
Package Version
---------- -------
pip 24.0
setuptools 69.5.1
wheel 0.43.0
(venv312) /Users/venv312 % pip3 list
Package Version
------------------------- -----------
....
pillow 10.3.0
pip 21.2.4
pydantic 2.7.1
pydantic_core 2.18.2
pydub 0.25.1
....

pip의 버전이 내용도 틀리고 pip버전이 24.0 과 21.2.4로 차이가 난다.

그리고 끝부분에

WARNING: You are using pip version 21.2.4;
however, version 24.0 is available.
You should consider upgrading via the
'/Library/Developer/CommandLineTools/usr/bin/
python3 -m pip install --upgrade pip' command.

이런 경고화면이 나옵니다.

이를 해결하기위해서는

(venv312) /Users/venv312 % pip3 install --upgrade pip


2024년 5월 17일 금요일

Mac에서 폴더 적용 스크립트를 활용하여 다운받은 파일을 정리하기

 다운로드 폴더에 들어오는 파일을 자동으로 정리하여봅니다.

[Cmd+Space] (=Spotlight) 한다음 스트립트편집기를 엽니다.


새로운 문서 만들기 창에서

사용자 폴더로 이동한다음 [Shift+Cmd+.]을 눌러 숨겨진 항목을 보이게합니다.

Library 폴더로 이동합니다.

Scripts 폴더로 이동합니다. 없으면 [MRB=마우스 오른쪽 버튼]하여 폴더를 생성해줍니다.

Folder Action Scripts 폴더로 이동합니다. 없으면 [MRB]하여 폴더를 생성해줍니다.

화면 아래쪽의 [새로운 폴더]버튼을 선택한 후 아래내용을 붙여넣기 합니다.



on adding folder items to this_folder after receiving added_items
repeat with the_item in added_items
tell application "Finder" to set {fType, nExt} to ({file type, name extension} of file the_item)
set the_folder to (path to downloads folder)
set the_sub_folder to "nil"
if (nExt is "pdf") then --파일의 확장자를 확인함
set the_sub_folder to "documents" --파일이 이동될 폴더의 이름을 설정함.
else if (nExt is "jpg") or (nExt is "jpeg") or (nExt is "png") or (nExt is "bmp") then
set the_sub_folder to "images"
else if (nExt is "dmg") or (nExt is "zip") then
set the_sub_folder to "dmgs"
else if (nExt is "torrent") then
set the_sub_folder to "torrents"
end if
--폴더가 생성이 되어있지 않은경우 폴더 생성함.
if not (the_sub_folder is equal to "nil") then
set the_target to POSIX path of the_folder & the_sub_folder
--for debug
--display dialog the_target
tell application "Finder"
if (exists folder the_sub_folder of the_folder) then
--for debug
--say "폴더 존재함"
else
make new folder at the_folder with properties {name:the_sub_folder}
--say "폴더 생성함"
end if
move the_item to POSIX file the_target with replacing
end tell
end if
end repeat
end adding folder items to

메뉴에서 [파일 > 저장...]한 다음 moveFiles.scpt로 저장해 줍니다.



스크립트 편집기를 종료합니다.
다운로드 폴더로 이동한다음 [MRB]한 후 
[폴더적용 스크립트 설정..]에서
방금전에 생성한 파일(moveFiles.scpt)를 선택합니다.
서비스 확인창이 뜨면 서비스실행을 선택합니다.

폴더적용 스크립트 창을 닫고 pdf, dmg, torrent등의 파일을 다른폴더에서 이동시키거나, 인터넷에서 파일을 다운받으면 파일이 자동으로 정리됩니다.







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()])

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

2024년 3월 28일 목요일

prophet 를 이용하여 시계열 예측을 할때 설치가 안될때(fbprophet)

 pip install fbprophet 으로 설치가 안될때

python -m pip install prophet 으로 설치하고. fbprophet을 prophet으로 바꾸어 준다.


pip install -U finance-datareader

pip install plotly



from prophet import Prophet

from prophet.plot import plot_plotly, plot_components_plotly
import FinanceDataReader as fdr



StockCode = '247540'
stock = fdr.DataReader(StockCode, '2021-1-1')
stock.head()

  

stock['y'] = stock['Close']
stock['ds'] = stock.index
stock.head()


m = Prophet()
m.fit(stock)


feature = m.make_future_dataframe(periods=30)


forecast = m.predict(feature)


fig = m.plot(forecast)


하고 나면 


ValueError: Mime type rendering requires nbformat>=4.2.0 but it is not installed -> 


에러가 나온다


pip install nbformat

pip install --upgrade nbformat

한후

pip install ipykernel

커널을 다시설치하고, Reset kernel을 한다. 




2024년 3월 19일 화요일

windows powershell에서 가상환경 들어가기

 windows powershell에서 가상환경 들어가기위해 Activate.ps1을 실행하면

와 같이 들어가지 못한다.
powershell을 관리자모드로 실행한 후 정책을 바꾸어줘야 한다.
아래는 현재 정책을 확인하고 Remote로 밖는 과정을 보여준다.
결과. (참고로 파이썬에 http 서버가 있어서 같은 게이트웨이 내라면 서버로....) 



Intel Mac torch(인텔 맥에서 파이토치)사용시 에러중

https://doheon.github.io/%EC%BD%94%EB%93%9C%EA%B5%AC%ED%98%84/time-series/ci-4.transformer-post/ 을 따라하다가 TypeError : Cannot convert a MPS Te...