내 연락처 정보
우편메소피아@프로톤메일.com
2024-07-12
한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina
이전 기사에서 우리는 대형 모델을 운영할 때 CPU를 사용하여 작업할 때 CPU 사용량이 매우 높다는 것을 발견했습니다. 그러므로 여기서 우리는 머신에 GPU 그래픽 카드가 있다면 어떻게 하면 벡터 연산에서 그래픽 카드를 활용하고 머신러닝 관련 연산을 빠르고 잘 수행할 수 있을지 생각해 보겠습니다.
현재 기계 학습을 지원하는 주류 그래픽 카드는 일반적으로 N 카드로 알려진 Nvida 시리즈 그래픽 카드라는 것을 알고 있습니다. 그러나 Mac 컴퓨터에는 일반적으로 AMD 시리즈 그래픽 카드가 통합되어 있습니다. 서로 다른 두 하드웨어 명령어 세트의 차이로 인해 상위 계층에서는 서로 다른 구현 기술이 필요하게 됩니다.
하지만 AMD 그래픽 카드에는 PlaidML 기술이 있습니다. 이 플러그인을 통해 다양한 그래픽 카드의 차이점을 캡슐화할 수 있습니다.
PlaidML 프로젝트 주소: https://github.com/plaidml/plaidml
현재 PlaidML은 이미 Keras, ONNX, nGraph와 같은 도구를 지원하고 있습니다. Keras를 사용하여 모델을 직접 구축할 수 있으며 MacBook에서 GPU를 쉽게 호출할 수 있습니다.
PlaidML이라는 이 도구를 통해 NVIDIA, AMD, Intel 그래픽 카드에 관계없이 딥러닝 훈련을 쉽게 수행할 수 있습니다.
인용하다:Mac은 PlaidML을 통해 강화 학습 훈련 속도를 높입니다.
이 작업에서 기존 keras 알고리즘의 경우 CPU와 GPU에서 각각 여러 라운드의 계산이 수행되며 통계에는 시간이 많이 걸립니다. 비교 통계를 만드세요.
이번에 사용된 Mac 기기의 소프트웨어 및 하드웨어 매개변수는 다음과 같습니다.
종속 패키지를 설치하는 과정에는 명령 상호 작용이 필요하므로 plaidML 패키지 설치는 명령줄에서 수행되고 코드 실행은 jupyter에서 수행됩니다.
jupyter에는 가상 환경 사용 시 커널 생성이 필요한 기술적인 부분이 있기 때문에 당분간 검증을 위해 원본 Python 환경을 직접 사용하는 것이 좋습니다. 가상 환경에서 jupyter의 구성 특성을 이해한 학생들은 이를 가상 환경에서 직접 사용해 볼 수 있습니다.
pip3 install plaidml-keras
작성자가 pip3 install plaidml-keras 명령을 사용하여 최신 버전인 plaidml-keras인 0.7.0을 설치한 후 초기화 작업을 수행할 때 버그가 발생하여 0.6.4로 축소되어 실행이 되었습니다. 정상. 그런데 0.7.0으로 다시 설치하니 다시 정상이 되었습니다.
github의 plaidml
명령줄에서 실행
plaidml-setup
대화형 내용은 다음과 같습니다
(venv) tsingj@tsingjdeMacBook-Pro-2 ~ # plaidml-setup
PlaidML Setup (0.6.4)
Thanks for using PlaidML!
Some Notes:
* Bugs and other issues: https://github.com/plaidml/plaidml
* Questions: https://stackoverflow.com/questions/tagged/plaidml
* Say hello: https://groups.google.com/forum/#!forum/plaidml-dev
* PlaidML is licensed under the Apache License 2.0
Default Config Devices:
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Experimental Config Devices:
llvm_cpu.0 : CPU (LLVM)
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
opencl_amd_radeon_pro_5300m_compute_engine.0 : AMD AMD Radeon Pro 5300M Compute Engine (OpenCL)
opencl_cpu.0 : Intel CPU (OpenCL)
opencl_intel_uhd_graphics_630.0 : Intel Inc. Intel(R) UHD Graphics 630 (OpenCL)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Using experimental devices can cause poor performance, crashes, and other nastiness.
Enable experimental device support? (y,n)[n]:
현재 지원되는 그래픽 카드를 나열하고 기본적으로 지원되는 2개의 그래픽 카드 또는 실험 단계에서 지원되는 6개의 하드웨어 모두 중에서 선택합니다.
기본적으로 지원되는 2개의 그래픽 카드를 확인할 수 있는데, 이는 초기 스크린샷에서 실제 그래픽 카드 2개입니다. 테스트 안정성을 위해 먼저 N을 선택하고 Enter를 누르십시오.
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:
1 : metal_intel(r)_uhd_graphics_630.0
2 : metal_amd_radeon_pro_5300m.0
Default device? (1,2)[1]:1
Selected device:
metal_intel(r)_uhd_graphics_630.0
기본 선택 설정의 경우 기본 장치를 먼저 설정합니다. 물론, 이 장치의 성능은 실제로 상대적으로 낮습니다. 나중에는 metal_amd_radeon_pro_5300m.0을 기본 장치로 설정합니다. 비교.
1을 쓴 후 Enter를 누르세요.
Almost done. Multiplying some matrices...
Tile code:
function (B[X,Z], C[Z,Y]) -> (A) { A[x,y : X,Y] = +(B[x,z] * C[z,y]); }
Whew. That worked.
Save settings to /Users/tsingj/.plaidml? (y,n)[y]:y
Success!
Enter를 눌러 구성 정보를 기본 구성 파일에 기록하여 구성을 완료합니다.
이 섹션에서는 jupyter를 사용하여 간단한 알고리즘 코드를 실행하고 시간을 계산합니다.
#!/usr/bin/env python
import numpy as np
import os
import time
import keras
import keras.applications as kapp
from keras.datasets import cifar10
(x_train, y_train_cats), (x_test, y_test_cats) = cifar10.load_data()
batch_size = 8
x_train = x_train[:batch_size]
x_train = np.repeat(np.repeat(x_train, 7, axis=1), 7, axis=2)
여기서 기본 Keral 컴퓨팅 백엔드는 Tenserflow를 사용해야 합니다. 출력을 확인하세요.
2024-07-11 14:36:02.753107: I tensorflow/core/platform/cpu_feature_guard.cc:210] 이 TensorFlow 바이너리는 성능이 중요한 작업에서 사용 가능한 CPU 명령어를 사용하도록 최적화되었습니다.
다음 지침을 활성화하려면 AVX2 FMA를 사용하고, 다른 작업에서는 적절한 컴파일러 플래그로 TensorFlow를 다시 빌드합니다.
model = kapp.VGG19()
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
초기 배치 실행(타일 프로그램 컴파일)
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 1초/단계
# Now start the clock and run 10 batchesprint("Timing inference...")
start = time.time()
for i in range(10):
y = model.predict(x=x_train, batch_size=batch_size)
print("Ran in {} seconds".format(time.time() - start))
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 891ms/단계
0.9295139312744141초만에 실행됨
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 923ms/단계
1.8894760608673096초만에 실행되었습니다
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 893ms/단계
2.818492889404297초만에 실행됨
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 932ms/단계
3.7831668853759766초만에 실행됨
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 892ms/단계
4.71358585357666초만에 실행되었습니다
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 860ms/단계
5.609835863113403초만에 실행되었습니다.
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 878ms/단계
6.5182459354400635초만에 실행되었습니다.
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 871ms/단계
7.423128128051758초만에 실행됨
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 896ms/단계
8.352543830871582초만에 실행됨
1/1 ━━━━━━━━━━━━━━━━━━━━ 1초 902ms/단계
9.288795948028564초만에 실행됨
# Importing PlaidML. Make sure you follow this order
import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
메모:
1. plaidml=0.7.0 버전을 사용할 경우 plaidml.keras.install_backend() 작업시 오류가 발생합니다.
2. 이 단계에서는 keras를 plaidml을 통해 가져오고, 백그라운드 컴퓨팅 엔진은 Tenserflow 대신 plaidml로 설정됩니다.
#!/usr/bin/env python
import numpy as np
import os
import time
import keras
import keras.applications as kapp
from keras.datasets import cifar10
(x_train, y_train_cats), (x_test, y_test_cats) = cifar10.load_data()
batch_size = 8
x_train = x_train[:batch_size]
x_train = np.repeat(np.repeat(x_train, 7, axis=1), 7, axis=2)
model = kapp.VGG19()
최초 실행 시 그래픽 카드 정보 출력
INFO:plaidml:장치 “metal_intel®_uhd_graphics_630.0” 열기
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
초기 배치 실행(타일 프로그램 컴파일)
출력 속도가 더 빠르기 때문에 한 줄의 내용만 인쇄됩니다.
# Now start the clock and run 10 batchesprint("Timing inference...")
start = time.time()
for i in range(10):
y = model.predict(x=x_train, batch_size=batch_size)
print("Ran in {} seconds".format(time.time() - start))
4.241918087005615초만에 실행됨
8.452141046524048초만에 실행되었습니다
12.665411949157715초만에 실행됨
16.849968910217285초만에 실행됨
21.025720834732056초에 실행되었습니다.
25.212764024734497초만에 실행됨
29.405478954315186초만에 실행됨
33.594977140426636초만에 실행되었습니다
37.7886438369751초만에 실행됨
41.98136305809021초만에 실행됨
plaidml-setup 설정에서 그래픽 카드를 선택하는 단계에서 그래픽 카드 metal_intel®_uhd_graphics_630.0은 더 이상 선택되지 않고 metal_amd_radeon_pro_5300m.0이 선택됩니다.
(venv) tsingj@tsingjdeMacBook-Pro-2 ~ # plaidml-setup
PlaidML Setup (0.6.4)
Thanks for using PlaidML!
Some Notes:
* Bugs and other issues: https://github.com/plaidml/plaidml
* Questions: https://stackoverflow.com/questions/tagged/plaidml
* Say hello: https://groups.google.com/forum/#!forum/plaidml-dev
* PlaidML is licensed under the Apache License 2.0
Default Config Devices:
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Experimental Config Devices:
llvm_cpu.0 : CPU (LLVM)
metal_intel(r)_uhd_graphics_630.0 : Intel(R) UHD Graphics 630 (Metal)
opencl_amd_radeon_pro_5300m_compute_engine.0 : AMD AMD Radeon Pro 5300M Compute Engine (OpenCL)
opencl_cpu.0 : Intel CPU (OpenCL)
opencl_intel_uhd_graphics_630.0 : Intel Inc. Intel(R) UHD Graphics 630 (OpenCL)
metal_amd_radeon_pro_5300m.0 : AMD Radeon Pro 5300M (Metal)
Using experimental devices can cause poor performance, crashes, and other nastiness.
Enable experimental device support? (y,n)[n]:n
Multiple devices detected (You can override by setting PLAIDML_DEVICE_IDS).
Please choose a default device:
1 : metal_intel(r)_uhd_graphics_630.0
2 : metal_amd_radeon_pro_5300m.0
Default device? (1,2)[1]:2
Selected device:
metal_amd_radeon_pro_5300m.0
Almost done. Multiplying some matrices...
Tile code:
function (B[X,Z], C[Z,Y]) -> (A) { A[x,y : X,Y] = +(B[x,z] * C[z,y]); }
Whew. That worked.
Save settings to /Users/tsingj/.plaidml? (y,n)[y]:y
Success!
# Importing PlaidML. Make sure you follow this order
import plaidml.keras
plaidml.keras.install_backend()
import os
os.environ["KERAS_BACKEND"] = "plaidml.keras.backend"
메모:
1. plaidml=0.7.0 버전을 사용할 경우 plaidml.keras.install_backend() 작업시 오류가 발생합니다.
2. 이 단계에서는 keras를 plaidml을 통해 가져오고, 백그라운드 컴퓨팅 엔진은 Tenserflow 대신 plaidml로 설정됩니다.
#!/usr/bin/env python
import numpy as np
import os
import time
import keras
import keras.applications as kapp
from keras.datasets import cifar10
(x_train, y_train_cats), (x_test, y_test_cats) = cifar10.load_data()
batch_size = 8
x_train = x_train[:batch_size]
x_train = np.repeat(np.repeat(x_train, 7, axis=1), 7, axis=2)
model = kapp.VGG19()
INFO:plaidml:장치 “metal_amd_radeon_pro_5300m.0” 열기
여기서는 처음으로 그래픽 카드 정보를 입력한다는 점에 유의하세요.
model.compile(optimizer='sgd', loss='categorical_crossentropy',metrics=['accuracy'])
print("Running initial batch (compiling tile program)")
y = model.predict(x=x_train, batch_size=batch_size)
초기 배치 실행(타일 프로그램 컴파일)
출력 속도가 더 빠르기 때문에 한 줄의 내용만 인쇄됩니다.
# Now start the clock and run 10 batchesprint("Timing inference...")
start = time.time()
for i in range(10):
y = model.predict(x=x_train, batch_size=batch_size)
print("Ran in {} seconds".format(time.time() - start))
출력 보기
0.43606019020080566초에 실행되었습니다
0.8583459854125977초에 실행되었습니다
1.2787911891937256초만에 실행됨
1.70143723487854초만에 실행됨
2.1235032081604004초만에 실행됨
2.5464580059051514초만에 실행됨
2.9677979946136475초만에 실행됨
3.390064001083374초만에 실행됨
3.8117799758911133초만에 실행되었습니다
4.236911058425903초만에 실행됨
그래픽 카드 metal_intel®_uhd_graphics_630.0의 메모리 값은 1536MB입니다. 비록 그래픽 카드로서 계산 성능은 이 기기의 6코어 CPU만큼 좋지 않습니다.
그래픽 카드 metal_amd_radeon_pro_5300m.0의 메모리 값은 4G이며 기본 CPU와 비교하면 성능이 거의 1배 더 높습니다.
이를 통해 기계 학습 작업에 GPU를 사용하면 얻을 수 있는 강력한 이점을 확인할 수 있습니다.