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 서버가 있어서 같은 게이트웨이 내라면 서버로....) 



2024년 3월 18일 월요일

windows 에서 파이썬 3.8 버전 설치하기

 2024년 3월 현재 tenserflow 2.13을 설치하려면 파이썬 3.8버전을 설치해야하는데

파이썬 홈페이지에 들어가면 3.8버전의 소스만 있다 설치는?

윈도우의 cmd창을 연 다음 winget 명령을 실행해본다.

명령어가 실행되면 winget search python 해보면 설치할 수 있는 버전들이 보인다.

2번째 열이 id 이다.
이제 이렇게 설치하자
winget install --id Python.Python.3.8
설치되는 위치는 아래 이미지를 참고하시고

기본 Python 경로를 환경변수에서 패스를 지정해주면 된다.

시작 > 시스템 > 고급 시스템설정 > 환경변수 에서 path를 고쳐주면 된다.


cmd 창에서 python을 입력해보면 확인할 수 있다.

참고로 가상환경을 설정하려면 python -m venv venv 하면 루트에 venv폴더에 가상환경이 설치되고 가상환경실행은

c:\venv\Script\activate

를 실행해주면 됨. 프롬프트가 (venv)이렇게 바뀌면 성공.

파워셀에서라면 c:\venv\Scripts\Activate.ps1 







2024년 3월 14일 목요일

맥 가상환경상태에서 vscode(또는 다른 응용프로그램) 실행하기

 

맥 터미널에서 가상환경으로 들어간다음 vscode를 실행하고 커널선택을 하려고하면 가상환경이 나타나지 않는다. 

가상환경 찾기를 하여 인터프리터 링크를 선택하면  



전혀 엉뚱한 환경을 들어가서 pip list 해보면 설치된 패키지가 보이지 않는다.

이것은 python -m venv  venv --version=3.8 형식으로 기존에 설치된 버전을 링크하여 생성했기 때문인것 같다.

설정에서 settings.jason에서 편집을 찾아

"python.defaultInterpreterPath": "/Users/gilson/venv",


위와 같이 고쳐주면 된다.

! 아래내용 추가(2024. 4. 5)

viscose 에서는 해결했는데 다른 응용프로그램(RapidMiner)에서 같은 문제를 일으켜서 아에 링크를 찾아가서 python3.8 (실행파일)을 복사해와 가상환경 bin 폴더에 붙여넣기 하였더니 해결되었습니다.

🚀 시니어 직장인의 AI 탐구기: OpenCode 완벽 실전 가이드 "코딩을 몰라도 괜찮습니다. 내 컴퓨터 옆자리에 든든한 AI 신입사원을 두고 퇴근 시간을 앞당겨 보세요!" 본 블로그는 시니어 직장인의 현실적...