日期:2020-11-04
macos版本:10.15.7
Python版本:anaconda python 3.8
CPU:AMD Ryzen5 3600
參考文檔:
http://bbs.pcbeta.com/forum.php?mod=viewthread&tid=1860593
https://gist.github.com/naveenkrdy/26760ac5135deed6d0bb8902f6ceb6bd
https://github.com/pytorch/pytorch/issues/31106
報錯原因:mac上的Python包numpy和pytorch以及adobe系軟件依賴Intel MKL,MKL是英特爾數(shù)學(xué)核心函數(shù)庫拖陆,AMD安裝黑蘋果時,MKL_DEBUG_CPU_TYPE會被錯誤地自動設(shè)置為0,導(dǎo)致numpy和pytorch以及adobe軟件在讀取這個配置時報錯。
解決方法:似乎MKL_DEBUG_CPU_TYPE設(shè)置為5時表示avx2指令集,所以對于支持avx2指令集的處理器(比如Ryzen),可以將MKL_DEBUG_CPU_TYPE設(shè)置為5∮骼ǎ可以在終端中執(zhí)行export MKL_DEBUG_CPU_TYPE=5然后再啟動Python并引入numpy包試一下看會不會再報錯。
如果在終端中嘗試有效贫奠,則復(fù)制以下命令到終端唬血,并回車,使這個設(shè)置永久生效:
(此腳本參考https://github.com/pytorch/pytorch/issues/31106唤崭,如果你是想解決Adobe軟件的問題拷恨,則原文檔中還有另一個腳本需要執(zhí)行)
[ ! -d $HOME/Library/LaunchAgents ] && mkdir $HOME/Library/LaunchAgents
AGENT=$HOME/Library/LaunchAgents/environment.plist
sysctl -n machdep.cpu.brand_string | grep FX >/dev/null 2>&1 #判斷處理器是不是AMD FX系列
x=$(echo $(($? != 0 ? 5 : 4))) #如果是FX系列則x=4,否則x=5
cat >$AGENT <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Label</key>
<string>mkl-debug</string>
<key>ProgramArguments</key>
<array>
<string>sh</string>
<string>-c</string>
? ? <string>launchctl setenv MKL_DEBUG_CPU_TYPE $x;</string>
</array>
<key>RunAtLoad</key>
<true/>
</dict>
</plist>
EOF
launchctl load ${AGENT} >/dev/null 2>&1
launchctl start ${AGENT} >/dev/null 2>&1
執(zhí)行后重啟軟件生效谢肾。