2018年6月27日 星期三

CUDA 9.2 安裝全部失敗,如何安裝在 Visual Studio 2017

CUDA 9.2 安裝全部失敗,如何安裝在 Visual Studio 2017

會失敗主要原因在於安裝的時候會驗證電腦上所有 Visual Studio 的版本,如果不支援就不會讓你安裝,通常這種情況是出現在 VS2017 更新之後,現有的CUDA版本就不能裝了。
VS如果只是小更新而不是重大更新那麼其實還是可以用的,跳過驗證強制安裝即可,如果是大改版只能等CUDA推進下一版本了。
下面說明如何強只安裝,應該適用於任何時候~往後版本更新也可以這樣做

移除安裝驗證

如果有安裝RAR,直接對著你下載的程式按右鍵解壓縮,解壓縮不會有料夾記得不要按直接解壓縮至此。
然後就看到原本會解壓縮到暫存區的檔案了,找到裡面的資料夾
CUDAVisualStudioIntegration
這個裡面的
CUDAVisualStudioIntegration.nvi
這份文件使用文字編輯器打開,CUDA9.2 是88行到111行
不過還是建議你對照一下下面這段文字
<custom phase="handleExistingNsight" action="HandleExistingNsight"/>
<custom phase="detectDisableCallHome" action="DetectDisableCallHome"/>
<msi platform="x86" phase="NsightMSINoTraffic" name="${{NsightMSI}}" condition="NsightMSIActionActiveAndNoTraffic" installText="Installing Nsight Visual Studio Edition">
  <arg name="CUDAINSTALLER" value="true"/>
  <arg name="DISABLE_NV_CH" value="1"/>
</msi>
<msi platform="x86" phase="NsightMSITraffic" name="${{NsightMSI}}" condition="NsightMSIActionActiveAndTraffic" installText="Installing Nsight Visual Studio Edition">
  <arg name="CUDAINSTALLER" value="true"/>
  <arg name="DISABLE_NV_CH" value="0"/>
</msi>
<confirm phase="Confirm-install" when="install" condition="NsightMSIActionActive">
  <fileExists target="${{CommonAppData}}\NVIDIA  Corporation\Nsight\Nsight_${{nsightVersion}}_InstallSummary.xml"/>
</confirm>
<standard phase="copytemp" condition="NsightMSIActionActive">
  <copyFile source="NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi" target="${{CommonAppData}}\NVIDIA Corporation\Nsight\NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi" />

</standard>
<standard phase="createStartMenuStortcuts" condition="NsightMSIActionActive">
  <createShortcutGroup location="startMenu" linkGroup="${{NsightProgramGroup}}"/>
  <createShortcutLink location="startMenu" targetPath="${{CommonAppData}}\NVIDIA Corporation\Nsight\NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi" linkGroup="${{NsightProgramGroup}}" linkName="Nsight Redistributable"/>
</standard>
<custom phase="ParseWarningPage" action="ReadWarningPage" condition="NsightMSIActionActive"/>

<msi platform="x86" phase="NVTXMSI" name="${{NVTXMSI}}" installText="Installing NVTX"/>
把他們通通註解掉或是刪除,然後就打開上一頁的 setup.exe 正常安裝即可。這樣就可以避開驗證正常安裝了。
不過有兩個檔案不會安裝,也就是剛剛 CUDAVisualStudioIntegration 這個資料夾裡的兩個 .msi 檔案,分別是
  • NVIDIA NVTX Installer.x86_64.Release.v1.21018621.Win64.msi
  • NVIDIA_Nsight_Visual_Studio_Edition_Win64_5.6.0.18099.msi
手動打開並安裝即可,這不會有什麼影響因為上面兩個檔案是跟著VS的版本跑的,所以更新之後不認得就不給裝;大更新就只能等下一版,小更新如果沒影響到我們就跳過驗證安裝即可。

編譯範例檔案

除了安裝之外範例檔案的編輯也會限制,這個也要解除限制。具體細節是藏在
C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.2\include\crt\host_config.h
這一份文件裡面,找到裡面的
#if _MSC_VER < 1600 || _MSC_VER > 1913
把後面的版本限制移除改成
#if _MSC_VER < 1600
這樣就不會被阻擋了,好一點做法是查一下當前VS版本幾版跟進。
這裡要注意的是如果你這麼做了,而一段時間之後VS改版改太多CUDA版本已經不適用的時候不會跳警告出來。

參考

2018年6月26日 星期二

[圖文] Jetson3.3 TX2 環境 配置 安裝 含 OpenCV3.4 編譯 升級方法

[圖文] Jetson3.2 TX2 環境 配置 安裝 含 OpenCV3.4 編譯 升級方法

TX2從零開始完整的圖文教學~
前置條件安裝 ubuntu 16.04 可以參考這篇站內文:
https://charlottehong.blogspot.com/2018/06/ubuntu1604-efi.html
安裝過 TX2 的 Ubuntu 會被安裝一堆軟件還有開啟 arm 的鏡像站會造成 upgrad 的時候跳錯,雖然不影響只是看了很礙眼XD,建議是額外安裝一個新的系統不要用自己正在用的。

下載 jetpakc3.2

jetpakc3.2:https://developer.nvidia.com/embedded/jetpack
需要加入會員才可以下載,有點麻煩就註冊一下吧
下載完之後直接執行他
# 版本號會變我用*號替代,沒同名衝突也是可以執行的
chmod +x JetPack*.run
./JetPack*.run
然後就有圖形化介面可以安裝了

開始安裝

一開始會先跳一個框框,按下ok即可
下一步
打勾 yes 同意
選擇你的版子Tx2
預設就是 full 安裝全部,直接next即可
需要同意這些事項
漫長的下載與安裝等待
這邊下載很吃網路(可能是跑BT),路由器硬件能力較差可能會倒置網路癱瘓(我用RT-N10+ 整個卡死不能開網頁),網路不夠快可能會倒置整個網路環境爆ping。
中間會跳一個視窗要你按
然後繼續跑
完成之後下一步
這邊會要你選擇模式,建議就照著圖一的方式接,也就是把TX2跟當前的電腦接到同一個WIFI機上面,真的沒有WIFI機可以接在考慮圖二的方式
選擇網卡,只有一張就直接下一步吧
繼續下一步
還有跳一黑窗要你做一些事
如以下步驟:
  1. 切斷TX2電源
  2. 接上 USB 與電腦連接
  3. 打開TX2電源
  4. 按一下POWER按鈕
  5. 同時按住 RET與REC按鈕
然後自己打開一個新的終端機輸入 lsusb 看看有沒有 NVIDIA Corp. 有就可以繼續了
然後回到黑窗按一下 Enter 繼續漫長的等待
過程會跳一個資料夾出來只是說明文件可以閱讀一下,也可以直接關閉
再來還需要一段時間安裝還沒裝好,從跳出上圖開始,右上角會顯示網路中斷警告,但還可以繼續用網路。等到安裝完畢移除TX2與電腦的USB連接網路中斷警告就會恢復了。
中間會出現一次要求你按enter的視窗,按了之後還要跑一段時間然後還有第二次,第二次比較特別要實際到 nvidia tx2 上面操作
第二次的時候直接 ctrl+c 也可以完成安裝,會少裝一些套件
這邊大致上就是說給你 ip 你連過去照著上面的指令打
# 這邊 ip 自己看不一定是這個,指令也照上面的為主,版本更動可能有變

ssh nvidia@192.168.50.3sudo dpkg -i ~/TensorRT/libnvinfer4_4.1.3-1+cuda9.0_arm64.deb; sudo dpkg -i ~/TensorRT/libnvinfer-dev*; sudo dpkg -i ~/TensorRT/libnvinfer-samples*; sudo dpkg -i ~/TensorRT/tensorrt* ;sudo dpkg -i ~/TensorRT/libgie-dev*

sudo apt-get -f install
然後回到黑窗按2次 enter 然後就會繼續執行了。
接下來還有一次,做完一樣回到黑窗按兩下 enter (要等真沒反應多按一下)
sudo apt-get install libvisionworks libvisionworks-dev libvisionworks-samples

sudo apt-get -f install
安裝完畢,黑窗會顯示關閉即可~關閉就安裝好了
再來TX2就已經開機了,可以直接接上HDMI線與螢幕看到作業系統
NVIDIA TX2 預設密碼是 nvidia
然後就可以開心的使用瞜,一切套件都裝好了 CUDA 9 與 OpenCV331 等等套件都包好了。


OpenCV 3.4 可執行 CUDA 版本

上面配置好之後預設的 opencv 好像沒有包含 GPU 版本,是 apt-get 的函式庫,如果需要運行 CUDA 需要自行重新編譯安裝。
# 移除原裝331版本
sudo apt-get purge libopencv *

# 先升級作業系統避免不必要的問題
sudo apt-get update
sudo apt-get dist-upgrade

# 下載套件
sudo apt-get install git
git clone https://github.com/jetsonhacks/buildOpenCVTX2

# 開始編譯
cd buildOpenCVTX2
./buildOpenCV.sh
然後會需要一段時間,還蠻久的等他自己跑完就可以了,跑完之後要補一條指令
# 更新路徑
sudo ldconfig
驗證一下有沒有安裝成功
# 察看OpenCV版本
pkg-config -- modversion

# 察看路徑與函式庫
pkg-config opencv --libs --cflags
然後就可以正常使用 OpenCV 的 CUDA 版本的函式庫了

ubuntu16.04 以 EFI 安裝系統詳細圖文說明

ubuntu16.04 以 EFI 安裝系統詳細圖文說明

網路上還有不少流傳著EFI無法安裝不能開啟之類的文章,其實很早之前就已經支援了,只是方法多一個小步驟漏了就很容易安裝失敗,才會導致這些文章的出現。

下載

官方載點:https://www.ubuntu-tw.org/modules/tinyd0/
選擇你要的版本~下載然後安裝到隨身碟
安裝到隨身碟可以參考這個軟體
rufus:https://rufus.akeo.ie/
打開之後把 ISO 拖曳拉進去,然後什麼都不用設置預設即可,直接按下執行
執行之後會刪除所有資料,記得要先備份

以EFI開啟隨身碟

做好隨身碟之後插入主機重新啟動,開機的時候按下選擇開機選單
  • 華碩:F8
  • 微星:F11
  • 技嘉:F12
有些板子預設是關閉的你在摸索一下怎麼開
這裡的重點是要選擇帶有 UEFI 字樣的開機才可以,選錯安裝完畢會失敗不能開機。
打開之後 ubuntu 有選單一般選第一個即可,如果顯示卡有衝突開機失敗就選第二個

開始安裝

進入隨身碟開機之後會是一個完整的 ubuntu 可以使用,桌面就有安裝選項打開他開始安裝。
選擇你要的語言
這裡依照情況選擇即可,建議是一起更新
如果有跳警告就繼續吧
選擇全新安裝
這裡記得要
  1. 先點選新分割表,這會刪除所有分區並格式化為GPT硬盤
  2. 點 + 新增EFI分區容量設置 大於100M即可
  3. 設置 SWAP 建議就16G吧
  4. 其他分區自行決定,沒有需求就是切一個root即可
還有最下方的用來安裝開機程式的裝置與MBR不同,
這裡要選中 EFI 分區,如圖中是 sda1 沒選到會導致不能開機
下一步選擇語言,預設即可
設置你的使用者資訊
然後等待安裝好
安裝好就可以重啟了

重新啟動之後

大部分的主機板預設都是用EFI啟動的,直接重啟即可,這邊要說例外尤其是 3代的英特爾普遍有這個問題。
我使用的板子是 H61 預設是不會使用EFI啟動的,也不能關閉CSM,所以重啟之後會使用原本的MBR開機,下場就是什麼都沒有開不起來,要手動到BIOS裡面調整為EFI啟動優先
EFI啟動選項有2個,一個有認證一個沒認證,如果你的主機板有打開安全啟動就是兩個都試試看即可。
如果是比電,少數的機種需要自己新增安裝選單,要找一下選項,有一個可以瀏覽檔案選中 s 開頭的efi檔案這個有認證的。

2018年6月24日 星期日

PowerShell 自動產生 gitignore 檔案

git 自動產生 gitignore 檔案

每一次都要打git的忽略文件超煩,完全沒意義的東西,真的該設定一個指令讓他自動執行呀。



安裝到 PoweShell

這邊已Windwos內建的 PoweShell 為例,直接輸入

git config --global alias.ignore '!gi() { curl -L -s https://www.gitignore.io/api/$@ ;}; gi'

如果當初安裝沒有打勾把命令注入到系統,可能沒辦法使用git命令,打開git bash輸入就好

生成文件

直接在git倉庫的目錄底下打下面指令就可以生成了

# linux
git ignore c++ >> .gitignore

# windwos (ps5.0 以前)
git ignore c++ | Out-File -Encoding ASCII .gitignore
  • 一個箭頭表示複寫新檔,兩個箭頭表示增加不會刪除舊檔
  • 多語言就用逗號隔開,可以一次混合成一包 git ignore c++,java

編碼問題

因為編碼的關係,預設 PowerShell 輸出並不是 UTF-8 而是 UTF-16 會導致 git 讀不到而不起作用。PowerShell 6 開始預設輸出就是 UTF-8 了,可以直接用箭頭產生。

查看PS版本 $PSVersionTable

有哪些語言可以用

上面打完就安裝好了,命令會在git的設定檔 .gitconfig 裡面新增一行指令。
這個文件一般安裝在使用者資料夾裡面,打開自己的使用者文件就找到了。

需要什麼語言可以打下面指令,包山包海應有盡有

git ignore list



如何優化指令

是能自己生出來了,可是每次都打這麼長怎麼受的了,這邊介紹一下如何在Win10底下自動生成gitignore文件檔。

首先配置一個起始文件,這個起始文件在powershell啟動的時候會自動執行裡面的內容。
下面的指令如果沒有建立過是空的,會自動生成一個起始文件

# 如果文件不存在自動生成
if (!(Test-Path -Path $PROFILE )) { New-Item -Type File -Path $PROFILE -Force }notepad $PROFILE
# 設置權限(預設沒權限可以執行)
Set-ExecutionPolicy AllSigned

然後用記事本打開編輯一下

notepad $PROFILE

第一次開應該是全空的,在裡面補上下面指令後,存檔就完成了

# 創建git的忽略檔
function gitIgnore ($Lang){
    git ignore $Lang | Out-File -Encoding ASCII -NoClobber .gitignore
}
function gitIgnoreOverWeite ($Lang){
    git ignore $Lang | Out-File -Encoding ASCII .gitignore
}
function gitIgnoreAppend ($Lang){
    git ignore $Lang | Out-File -Encoding ASCII -Append .gitignore
}
function gitIgnoreEdit($Editor){
    $ignoreFile = ".gitignore"
    if ($Editor){
        $cmd = $Editor + " " + $ignoreFile
        Invoke-Expression $cmd
    } else {
        notepad $ignoreFile 
    }

}

關閉重新開啟之後執行

cd ~\Desktop
gitIgnore java

這樣就會在桌面建立該文件了,要生成的文件的時候在那個git的資料夾按住shift在按右鍵,選擇在這裡開啟PS視窗,打這行指令就可以生成了

如果要新增兩個以上的語言就用 gitIgnoreAppend 會自動把新的內容寫在檔案結尾,使用 gitIgnoreOverWeite 則會覆蓋掉於本的檔案。

如果要手動編輯檔案則使用 gitIgnoreEdit 這個函式帶一個參數可以輸入自己喜歡的編譯器開啟。



參考

套件參考自:https://docs.gitignore.io/install/command-line