算能RISC-V通用云開發空間編譯pytorch @openKylin留檔

終于可以體驗下risc-v了! 操作系統是openKylin,算能的云空間

嘗試編譯安裝pytorch

首先安裝git

apt install git

然后下載pytorch和算能cpu的庫:

git clone https://github.com/sophgo/cpuinfo.git

git clone https://github.com/pytorch/pytorch

注意事項:

cd pytorch
# 確保子模塊的遠程倉庫URL與父倉庫中的配置一致
git submodule sync
# 確保獲取并更新所有子模塊的內容,包括初始化尚未初始化的子模塊并遞歸地處理嵌套的子模塊
git submodule update --init --recursive

將pytorch/third-parth目錄的cpuinfo刪除,換成算能的cpu庫cpuinfo

cd pytorch

rm -rf cpuinfo

cp -rf ../cpuinfo .

安裝相關庫

apt install libopenblas-dev 報錯,可以跳過

apt install libblas-dev m4 cmake cython3 ccache

手工編譯安裝openblas

git clone https://github.com/xianyi/OpenBLAS.git
cd OpenBLAS
make -j8
make PREFIX=/usr/local/OpenBLAS install

編譯的時候是一堆warning啊

在/etc/profile最后一行添加:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/OpenBLAS/lib/

并執行:source? /etc/profile

修改代碼

到pytorch目錄,執行:?vi aten/src/ATen/CMakeLists.txt

??? aten/src/ATen/CMakeLists.txt

將語句:if(NOT MSVC AND NOT EMSCRIPTEN AND NOT INTERN_BUILD_MOBILE)
替換為:if(FALSE)

?? vi caffe2/CMakeLists.txt

將語句:target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 sleef gtest_main)
替換為:target_link_libraries(${test_name}_${CPU_CAPABILITY} c10 gtest_main)

?? vi? test/cpp/api/CMakeLists.txt

在語句下:add_executable(test_api ${TORCH_API_TEST_SOURCES})
添加:target_compile_options(test_api PUBLIC -Wno-nonnull)

環境變量配置

# 直接在終端中輸入即可,重啟需要重新輸入
export USE_CUDA=0
export USE_DISTRIBUTED=0
export USE_MKLDNN=0
export MAX_JOBS=16

配置原文鏈接:https://blog.csdn.net/m0_49267873/article/details/135670989

編譯安裝

執行:

python3 setup.py develop --cmake

或者python3.10 setup.py install

據說要gcc 13以上,自帶的gcc版本:

gcc version 9.3.0 (Openkylin 9.3.0-ok12)

需要打patch:

# 若提示無patchelf命令,則執行下列語句
apt install patchelf

# path為存放libtorch_cpu.so的路徑
patchelf --add-needed libatomic.so.1 /path/libtorch_cpu.so
?

對算能云的系統來說,命令為:patchelf --add-needed libatomic.so.1? /root/pytorch/build/lib/libtorch_cpu.so

編譯前的準備

編譯前還需要安裝好這兩個庫:

pip3 install pyyaml typing_extensions

另外還要升級setuptools

pip3 install setuptools -U

最終編譯完成

在pytorch目錄執行:

python3 setup.py develop --cmake

整個編譯過程大約需要3-4個小時

最終編譯完成:

Installed /usr/lib/python3.8/site-packages/mpmath-1.3.0-py3.8.egg
Searching for typing-extensions==4.9.0
Best match: typing-extensions 4.9.0
Adding typing-extensions 4.9.0 to easy-install.pth file
detected new path './mpmath-1.3.0-py3.8.egg'

Using /usr/local/lib/python3.8/dist-packages
Finished processing dependencies for torch==2.3.0a0+git5c5b71b

測試

進入python3,執行import pytorch,報錯沒有pytorch。 執行import torch

看到沒有報錯,以為測試通過。其實是因為在pytorch目錄,有子目錄torch,誤以為pass了

是我唐突了,因為使用的develop模式,就是這樣用。

也就是必須在pytorch的目錄,這樣才能識別為develop的torch,在~/pytorch目錄,執行python3,在命令交互方式下,把下面這段代碼cp進去執行,測試通過

import torch
import torch.nn as nn
import torch.optim as optim
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"N,D_in,H,D_out = 64, 1000, 100, 10 # N: batch size, D_in:input size, H:hidden size, D_out: output size
x = torch.randn(N,D_in) # x = np.random.randn(N,D_in)
y = torch.randn(N,D_out) # y = np.random.randn(N,D_out)
w1 = torch.randn(D_in,H) # w1 = np.random.randn(D_in,H)
w2 = torch.randn(H,D_out) # w2 = np.random.randn(H,D_out)
learning_rate = 1e-6
for it in range(200):# forward passh = x.mm(w1) # N * H      h = x.dot(w1)h_relu = h.clamp(min=0) # N * H     np.maximum(h,0)y_pred = h_relu.mm(w2) # N * D_out     h_relu.dot(w2)  # compute lossloss = (y_pred - y).pow(2).sum() # np.square(y_pred-y).sum()print(it,loss.item()) #  print(it,loss)    # BP - compute the gradientgrad_y_pred = 2.0 * (y_pred-y)grad_w2 = h_relu.t().mm(grad_y_pred) # h_relu.T.dot(grad_y_pred)grad_h_relu = grad_y_pred.mm(w2.t())  # grad_y_pred.dot(w2.T)grad_h = grad_h_relu.clone() # grad_h_relu.copy()grad_h[h<0] = 0grad_w1 = x.t().mm(grad_h) # x.T.dot(grad_h)    # update weights of w1 and w2w1 -= learning_rate * grad_w1w2 -= learning_rate * grad_w2
0 29870438.0
1 26166322.0
2 25949932.0
3 25343224.0
4 22287072.0
5 16840522.0
6 11024538.0
7 6543464.5
8 3774165.25
9 2248810.5
10 1440020.25
11 1001724.5
12 749632.625
13 592216.6875
14 485451.34375
15 407586.65625
16 347618.4375
17 299686.625
18 260381.9375
19 227590.734375

怎樣全環境可以用torch呢?

感覺是環境變量的問題,敬請期待

調試

安裝libopenblas-dev報錯

root@863c89a419ec:~/pytorch/third_party# apt install libopenblas-dev
Reading package lists... Done
Building dependency tree... Done
Reading state information... Done
Package libopenblas-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source

竟然有人已經過了這個坑,可以跳過它,用編譯安裝openblas代替

編譯pytorch的時候報錯

python3 setup.py develop --cmake

Building wheel torch-2.3.0a0+git5c5b71b
-- Building version 2.3.0a0+git5c5b71b
Could not find any of CMakeLists.txt, Makefile, setup.py, LICENSE, LICENSE.md, LICENSE.txt in /root/pytorch/third_party/pybind11
Did you run 'git submodule update --init --recursive'?

進入third_parth目錄執行下面命令解決:

rm -rf pthreadpool
# 執行下列指令前回退到pytorch目錄
git submodule update --init --recursive

執行完還是報錯:

root@863c89a419ec:~/pytorch# python3 setup.py develop --cmake
Building wheel torch-2.3.0a0+git5c5b71b
-- Building version 2.3.0a0+git5c5b71b
Could not find any of CMakeLists.txt, Makefile, setup.py, LICENSE, LICENSE.md, LICENSE.txt in /root/pytorch/third_party/QNNPACK
Did you run 'git submodule update --init --recursive'?

再次執行命令 git submodule update --init --recursive 照舊。

將QNNPACK目錄刪除,再執行一遍 git submodule update --init --recursive ,過了。

報錯RuntimeError: Missing build dependency: Unable to `import yaml`.

python3 install pyyaml

報錯:ModuleNotFoundError: No module named 'typing_extensions'

python3 install typing_extensions 搞定。

編譯到78%報錯

/usr/bin/ld: /root/pytorch/build/lib/libtorch_cpu.so: undefined reference to `__atomic_exchange_1'
collect2: error: ld returned 1 exit status
make[2]: *** [caffe2/CMakeFiles/NamedTensor_test.dir/build.make:101: bin/NamedTensor_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:3288: caffe2/CMakeFiles/NamedTensor_test.dir/all] Error 2
/usr/bin/ld: /root/pytorch/build/lib/libtorch_cpu.so: undefined reference to `__atomic_exchange_1'
collect2: error: ld returned 1 exit status
make[2]: *** [caffe2/CMakeFiles/cpu_profiling_allocator_test.dir/build.make:101: bin/cpu_profiling_allocator_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:3505: caffe2/CMakeFiles/cpu_profiling_allocator_test.dir/all] Error 2
[ 78%] Linking CXX executable ../bin/cpu_rng_test
/usr/bin/ld: /root/pytorch/build/lib/libtorch_cpu.so: undefined reference to `__atomic_exchange_1'
collect2: error: ld returned 1 exit status
make[2]: *** [caffe2/CMakeFiles/cpu_rng_test.dir/build.make:101: bin/cpu_rng_test] Error 1
make[1]: *** [CMakeFiles/Makefile2:3536: caffe2/CMakeFiles/cpu_rng_test.dir/all] Error 2
make: *** [Makefile:146: all] Error 2

初步懷疑是cpu庫有問題。看cpu庫,沒問題。

試試這個辦法:

問題分析:對__atomic_exchange_1的未定義引用

解決方法:使用patchelf添加需要的動態庫

# 若提示無patchelf命令,則執行下列語句
apt install patchelf

# path為存放libtorch_cpu.so的路徑
patchelf --add-needed libatomic.so.1 /path/libtorch_cpu.so
?

存放libtorch_cpu.so的路徑:/root/pytorch/build/lib/libtorch_cpu.so

因此命令為:patchelf --add-needed libatomic.so.1 /root/pytorch/build/lib/libtorch_cpu.so

果然運行完這條命令后,編譯就能繼續下去了。

編譯100%報錯

running develop
/usr/lib/python3/dist-packages/setuptools/command/easy_install.py:146: EasyInstallDeprecationWarning: easy_install command is deprecated. Use build and pip and other standards-based tools.
? warnings.warn(
Traceback (most recent call last):
? File "setup.py", line 1401, in <module>
??? main()
? File "setup.py", line 1346, in main
??? setup(
? File "/usr/lib/python3/dist-packages/setuptools/__init__.py", line 87, in setup
??? return distutils.core.setup(**attrs)
? File "/usr/lib/python3/dist-packages/setuptools/_distutils/core.py", line 185, in setup
??? return run_commands(dist)
? File "/usr/lib/python3/dist-packages/setuptools/_distutils/core.py", line 201, in run_commands
??? dist.run_commands()
? File "/usr/lib/python3/dist-packages/setuptools/_distutils/dist.py", line 973, in run_commands
??? self.run_command(cmd)
? File "/usr/lib/python3/dist-packages/setuptools/dist.py", line 1217, in run_command
??? super().run_command(command)
? File "/usr/lib/python3/dist-packages/setuptools/_distutils/dist.py", line 991, in run_command
??? cmd_obj.ensure_finalized()
? File "/usr/lib/python3/dist-packages/setuptools/_distutils/cmd.py", line 109, in ensure_finalized
??? self.finalize_options()
? File "/usr/lib/python3/dist-packages/setuptools/command/develop.py", line 52, in finalize_options
??? easy_install.finalize_options(self)
? File "/usr/lib/python3/dist-packages/setuptools/command/easy_install.py", line 231, in finalize_options
??? self.config_vars = dict(sysconfig.get_config_vars())
UnboundLocalError: local variable 'sysconfig' referenced before assignment

嘗試升級setuptools試試

root@863c89a419ec:~# pip3 install? setuptools -U
Collecting setuptools
? Using cached setuptools-69.1.0-py3-none-any.whl (819 kB)
Installing collected packages: setuptools
? Attempting uninstall: setuptools
??? Found existing installation: setuptools 65.3.0
??? Not uninstalling setuptools at /usr/lib/python3/dist-packages, outside environment /usr
??? Can't uninstall 'setuptools'. No files were found to uninstall.
Successfully installed setuptools-69.1.0
然后再次編譯,過了!

查看gcc版本

據說要gcc 13以上,自帶的gcc版本:

gcc version 9.3.0 (Openkylin 9.3.0-ok12)

gcc version 9.3.0 (Openkylin 9.3.0-ok12)

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/697104.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/697104.shtml
英文地址,請注明出處:http://en.pswp.cn/news/697104.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

小米14 Ultra:未來科技的集大成者

博主貓頭虎的技術世界 &#x1f31f; 歡迎來到貓頭虎的博客 — 探索技術的無限可能&#xff01; 專欄鏈接&#xff1a; &#x1f517; 精選專欄&#xff1a; 《面試題大全》 — 面試準備的寶典&#xff01;《IDEA開發秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鴻蒙》 …

opencv圖像的本質

目的 OpenCV是一個跨平臺的庫&#xff0c;使用它我們可以開發實時的計算機視覺應用程序。 它主要集中在圖像處理&#xff0c;視頻采集和分析&#xff0c;包括人臉檢測和物體檢測等功能。 數字圖像在計算機中是以矩陣形式存儲的&#xff0c;矩陣中的每一個元素都描述一定的圖像…

VSCode React JavaScript Snippets 插件的安裝與使用指南

VSCode React JavaScript Snippets 插件的安裝與使用指南 在開發 React 項目時&#xff0c;提高效率是每個開發者都追求的目標之一。VSCode React JavaScript Snippets 插件就是為了提升 React 開發效率而設計的&#xff0c;它為常用的 React 代碼片段提供了快捷鍵&#xff0c;…

NXP實戰筆記(六):S32K3xx基于RTD-SDK在S32DS上配置PWM發波

目錄 1、概述 2、SDK配置 2.1、Port配置 2.2、Emios_Mcl_Ip 2.3、Emios_Pwm 2.4、代碼示例 1、概述 針對S32K3xx芯片&#xff0c;產生PWM的硬件支持單元僅有兩個&#xff0c;分別是eMiosx與Flexio. 生成PWM的順序&#xff0c;按照單片機所用資源進行初始化執行如下 初始化…

去年面試的運維開發面試題二

VPN有哪些協議&#xff0c;不同協議之間有何區別&#xff1f; 2.內部組網通常使用哪些類型的網段&#xff0c;兩個不同網段如何通信&#xff1f; 3.Linux中絕對路徑&#xff0c;相對路徑的區別 4. Linux如何添加磁盤&#xff0c;擴容系統文件&#xff1f; 5. Linux如何查看進程…

原型模式(Prototype Pattern) C++

上一節&#xff1a;建造者模式&#xff08;Builder Pattern&#xff09;C 文章目錄 0.理論1.原型模式的核心組成&#xff1a;2.實現方法3.什么時候使用 1.實踐步驟 1: 定義怪物原型步驟 2: 實現具體怪物原型步驟 3: 使用原型創建怪物 0.理論 原型模式&#xff08;Prototype P…

7-liunx服務器規范

目錄 概況liunx日志liunx系統日志syslog函數openlog 可以改變syslog默認輸出方式 &#xff0c;進一步結構化 用戶信息進程間的關系會話ps命令查看進程關系 系統資源限制改變工作目錄和根目錄服務器程序后臺話 概況 liunx服務器上有很多細節需要注意 &#xff0c;這些細節很重要…

服務網格Service Mesh和Istio

文章目錄 服務網格&#xff08;Service Mesh&#xff09;市場上三種服務網格解決方案服務網格的特征流量管理安全性可觀察性 Istio簡介Istio提供了什么功能服務 &#xff1f;Istio 核心特性流量管理安全可觀察性 平臺支持 服務網格&#xff08;Service Mesh&#xff09; 服務網…

Eureka注冊中心(黑馬學習筆記)

Eureka注冊中心 假如我們的服務提供者user-service部署了多個實例&#xff0c;如圖&#xff1a; 大家思考幾個問題&#xff1a; order-service在發起遠程調用的時候&#xff0c;該如何得知user-service實例的ip地址和端口&#xff1f; 有多個user-service實例地址&#xff0c…

六、行列式基本知識

目錄 1、行列式的特性 2、行列式的計算方法: 2.1 通過行列式的定義去計算:對角法則。 2. 2 利用行列式的性質將行列式轉化為上三角行列式: ①行列式的性質 : 性質一: 性質二: 性質三: 性質四:行列式之間的加法

TreeData 數據查找

TreeData 數據查找 最近做需求的時候遇到了這樣的一個需求&#xff0c;Tree組件數據支持查找&#xff0c;而且TreeData的數據層級是無限級的 開始想的事借助UI組件庫&#xff08;Ant-design-vue&#xff09;中的Tree組件的相關方法直接實現,看了下api 發現沒法實現&#xff0c;…

超級實用的python代碼片段匯總和詳細解析(16個)

目錄 1. 生成隨機文本 2. 計算文本文件中的字數 3. 替換文件文件中的字串 4. 多文件名的批量替換 5. 從網站提取數據 6. 批量下載圖片 7.批量刪除空文件夾 8.Excel表格讀寫 9.合并Excel表格工作簿 10.數據庫SQL查詢 11. 系統進程查殺 12.圖像尺寸調整和裁剪 13.圖…

redis實現消息隊列redis發布訂閱redis監聽key

文章目錄 Redis消息隊列實現異步秒殺1. jvm阻塞隊列問題2. 什么是消息隊列3. Redis實現消息隊列1. 基于List結構模擬消息隊列操作優缺點 2. 基于PubSub發布訂閱的消息隊列操作優缺點spring 結合redis的pubsub使用示例1. 引入依賴2. 配置文件3. RedisConfig4. CustomizeMessageL…

大語言模型的開山之作—探秘GPT系列:GPT-1-GPT2-GPT-3的進化之路

模型模型參數創新點評價GPT1預訓練微調&#xff0c; 創新點在于Task-specific input transformations。GPT215億參數預訓練PromptPredict&#xff0c; 創新點在于Zero-shotZero-shot新穎度拉滿&#xff0c;但模型性能拉胯GPT31750億參數預訓練PromptPredict&#xff0c; 創新點…

pclpy 可視化點云(多窗口可視化、單窗口多點云可視化)

pclpy 可視化點云&#xff08;多窗口可視化、單窗口多點云可視化&#xff09; 一、算法原理二、代碼三、結果1.多窗口可視化結果2.單窗口多點云可視化 四、相關數據五、問題與解決方案1.問題2.解決 一、算法原理 原理看一下代碼寫的很仔細的。。目前在同一個窗口最多建立2個窗…

ESP8266智能家居(3)——單片機數據發送到mqtt服務器

1.主要思想 前期已學習如何用ESP8266連接WIFI&#xff0c;并發送數據到服務器。現在只需要在單片機與nodeMCU之間建立起串口通信&#xff0c;這樣單片機就可以將傳感器測到的數據&#xff1a;光照&#xff0c;溫度&#xff0c;濕度等等傳遞給8266了&#xff0c;然后8266再對數據…

Java Web3J :使用web3j調用自己的智能合約,返回一個內部有數組的對象結構時出現NPE問題

之前有寫過一篇文章Java Web3J :使用web3j調用自己的智能合約的方法(教程),當時只是簡單的方法調用,也不涉及到什么復雜的數據類型,入參是long類型,出參是String類型。 目錄 問題描述報錯信息嘗試解決控制變量法查看源碼網上查閱解決最后問題描述 遇到這個問題是因為有…

【AI應用】SoraWebui——在線文生視頻工具

SoraWebui 是一個開源項目&#xff0c;允許用戶使用 OpenAI 的 Sora 模型使用文本在線生成視頻&#xff0c;從而簡化視頻創建&#xff0c;并具有輕松的一鍵網站部署功能 在 Vercel 上部署 1. 克隆項目 git clone gitgithub.com:SoraWebui/SoraWebui.git 2. 安裝依賴 cd Sor…

本科畢業設計(論文)開題報告:基于人工智能的短視頻獲客平臺的設計與實現

目錄 1.選題概述1.題目背景2.目的及意義3.技術現狀 2.題目內容1.任務概述2.系統設計1.數據采集模塊&#xff1a;2.數據處理與分析模塊&#xff1a;3.客戶識別模塊&#xff1a;4.推廣策略模塊&#xff1a; 3.功能模塊1.數據采集模塊&#xff1a;2.數據處理與分析模塊&#xff1a…

【Java EE初階二十】http的簡單理解(一)

1. 初識http HTTP 最新的版本應該是 HTTP/3.0&#xff0c;目前大規模使用的版本 HTTP/1.1&#xff1b; 下面來簡單說明一下使用 HTTP 協議的場景: 1、瀏覽器打開網站 (基本上) 2、手機 APP 訪問對應的服務器 (大概率) 前面的 TCP與UDP 和http不同&#xff0c;HTTP 的報文格式&a…