2018年12月3日 星期一

利用Tensorflow GPU運算,Anaconda平台安裝步驟

電腦環境

OS: windows 10 pro
顯卡:Nvidia 1080ti
Visual Studio 2017
CUDA Tookit 10.0
cuDNN v7.3.1 Library for Windows 10

1. 檢查顯示卡是否支援

2. 安裝Install Visual C++ Build Tools

3. CUDA Toolkit 安裝

因為我的電腦是nVidia  1080ti的顯示卡,也更新了驅動程式 ,所以就直接安裝CUDA   Toolkit
CUDA Toolkit 10.0 Download 
版本:cuda_10.0.130_win10_network.exe
CUDA Toolkit

執行安裝,windows 10安裝時,我都習慣用以"系統管理員身分執行"避免權限不足導致安裝異常等情況
image.png

接著一直"下一步"到完成安裝。
image.png

[注意]安裝的過程可能會更新到舊版本的驅動程式,我因為舊版本無法支援雙螢幕,另手動在更新最新版本的。

有些教學文會加註說明要設定環境變數,但目前在windows 10的安裝過程就會自己協助加入,不需在手動加入了。

安裝完成重新開機。

4.安裝完後檢查CUDA版本

命令提示字元下nvcc --version指令
image.png

5.安裝 NVIDIA CUDA Deep Neural Network library (cuDNN)


下戴網址

image.png

我下載的版本:cuDNN v7.3.1 Library for Windows 10

解壓縮檔案cudnn-10.0-windows10-x64-v7.3.1.20.zip
image.png
將內容檔案複製到 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0
取代目地檔案
image.png


6.安裝Anaconda

版本:Anaconda3-5.3.1-Windows-x86_64

安裝完成,以系統管理員執行Anaconda

建立python 3.6版本的環境,命名為tensorflow-gpu

image.png
image.png

pip install tensorflow-gpu
  Could not find a version that satisfies the requirement tensorflow-gpu (from versions: )
No matching distribution found for tensorflow-gpu
image.png
conda install tensorflow-gpu
Solving environment: failed

UnsatisfiableError: The following specifications were found to be in conflict:
  - tensorflow-gpu
Use "conda info <package>" to see the dependencies for each package.
image.png

新版的Anaconda3-5.3.1 ,預設Python版本是3.7,因tensorflow-gpu目前只支援到3.6版本

因此需要將Python降版到3.6,我這裡是降到3.6.5
先查看所有版本,指令:conda search --full-name python
image.png

指令:conda install python=3.6.5

查看降版結果,指令:conda info
image.png

安裝tensorflow-gpu,指令:  pip install tensorflow-gpu
image.png
命令指示字元啟用環境,指令:activate tensorflow-gpu

查看是否成功

安裝tensorflow-gpu,指令:conda install tensorflow-gpu
image.png

安裝keras,指令:conda install keras
image.png

執行spyder,跑看看檢查GPU運算功能是否生效

import tensorflow as tf; 
print(tf.GIT_VERSION, tf.VERSION)

# Create TensorFlow object called tensor
hello_constant = tf.constant('Hello World!')

with tf.Session() as sess:
    # Run the tf.constant operation in the session
    output = sess.run(hello_constant)
    print(output.decode())# bytestring decode to string.
    
# Creates a graph.
a = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[2, 3], name='a')
b = tf.constant([1.0, 2.0, 3.0, 4.0, 5.0, 6.0], shape=[3, 2], name='b')
c = tf.matmul(a, b)
# Creates a session with log_device_placement set to True.
sess = tf.Session(config=tf.ConfigProto(log_device_placement=True))
# Runs the op.
print(sess.run(c))

from keras import backend as K
K.tensorflow_backend._get_available_gpus()

image.png

跑看看python檢查cpu元件是否有缺少的? 

image.png

2018年10月15日 星期一

使用Lotusscript呼叫.Net console程式(.exe)執行檔

過去在Lotus Notes呼叫外部的自動化程式,我大多都以web service的方式來在呼叫。

此次為了偷吃步,較不嚴謹的使用.net console的專案,來開發自動化AD及遠端電腦的控制

而為了讓Notes能呼叫console的exe檔案,就必須使用shell指來來達成windows command調用的方法。

我使用了代理程式run on server的方式,並把安全性調到2

執行時期安全層次,調整至2.允許受限作業


接著呼叫shell()

而shell裡要包的就是command line的指令,但必須在command就直接呼叫cmd執行exe,並且自動開閉cmd。

這樣的需求就要下指令如下例:

cmd /K 程式.exe & exit


將指令包在shell裡面

dim result as Integer

result = shell("cmd /K 程式.exe &amp; exit")


這樣呼叫就可立即執行並關閉cmd視窗,借僅限於windows平台。

2018年10月14日 星期日

Server 2012 誤移除.NET 4.5 Framework後,重啟主機只剩命令列視窗問題.

解決方案連結參考→連結

今日為了解決web deploy無法正常驗証的問題,重新移除了web deploy的元件及所有.net Framework.
試著移除看看後,更糟糕了


導致windows server 2012重啟後,只剩下命令提示畫面(commmand line),後來參考討論區的解決方案,還原了原本的server GUI 畫面及.net 4.5

以下為剩下命令提示畫面(commmand line),要還原執行的指示:

1.執行元件安裝,分別是.net 4.5 Framework及PowerShell
DISM.exe /online /enable-feature /all /featurename:NetFx4
DISM.exe /online /enable-feature /all /featurename:MicrosoftWindowsPowerShell


2.執行指令,重新開機
Shutdown -r -t 0


3. 開機完成後,執行指令進入PowerShell模式
PowerShell.exe


4. 執行指令安裝還原Server GUI畫面
Install-WindowsFeature Server-Gui-Shell, Server-Gui-Mgmt-Infra

安裝畫面


5. 執行重新開機指令
Restart-Computer


6.接著還原到GUI畫面後,就可以重新安裝服務。

2018年10月13日 星期六

visual studio MVC 的javascript前端編輯,如何Debug

試了一下在javascript前端的.cshtml副檔中插入debug的中斷點
cshtml中插入debug的中斷點
cshtml中插入debug的中斷點

按下F5進行偵錯,確沒有效果。

查詢網路上的資料後,必須寫debugger指令讓網頁執行時進入中斷點
寫debugger指令讓網頁執行時進入中斷點

寫debugger指令讓網頁執行時進入中斷點

寫入debugger指令後,即可正常執行中斷,並可以查看物件資訊
正常執行中斷,並可以查看物件資訊
可Debug看前端物件






使用NHtmlUnit瀏覽某些網站會出現java.net.SocketException: 'Connection reset'錯誤訊息的問題

  2年前曾經有做過一個C# MVC專案要去單字網站爬下想背的單字來做資料庫,最近心血來潮也想重啟專案來使用(準備考TOEIC)。

發現之前專案(NHtmlUnit)可以爬的網頁竟然會彈跳java.net.SocketException: 'Connection reset',這問題讓我想不出所以然。

java.net.SocketException: 'Connection reset'
java.net.SocketException: 'Connection reset'


搜尋了這篇(文章)討論區的結果後發現,可能的問題是出在NHtmlUnit預設沒有設定TLS的版本

NHtmlUnit.WebClient client = new NHtmlUnit.WebClient(BrowserVersion.CHROME);
client.Options.AppletEnabled = true;
client.Options.RedirectEnabled = true;
client.Options.JavaScriptEnabled = true;
client.Options.ActiveXNative = true;
client.Options.CssEnabled = true;
client.Options.ThrowExceptionOnScriptError = false;
client.Options.ThrowExceptionOnFailingStatusCode = false;
client.WaitForBackgroundJavaScript(1000);
client.Options.Timeout = 100000;
HtmlPage page = client.GetHtmlPage("https://dictionary.cambridge.org/");

因此在程式碼中,加入TLS協定,就可以正常爬站了。

client.Options.SSLClientProtocols = new String[] { "TLSv1.2", "TLSv1.1" };

完整的程式碼如下:
NHtmlUnit.WebClient client = new NHtmlUnit.WebClient(BrowserVersion.CHROME);
client.Options.AppletEnabled = true;
client.Options.RedirectEnabled = true;
client.Options.JavaScriptEnabled = true;
client.Options.ActiveXNative = true;
client.Options.CssEnabled = true;
client.Options.ThrowExceptionOnScriptError = false;
client.Options.ThrowExceptionOnFailingStatusCode = false;
client.Options.SSLClientProtocols = new String[] { "TLSv1.2", "TLSv1.1" };
client.WaitForBackgroundJavaScript(1000);
client.Options.Timeout = 100000;
HtmlPage page = client.GetHtmlPage("https://dictionary.cambridge.org/");

Chrome 瀏覽器查看SSL/TLS方法

今天遇到爬蟲(crawler )程式在解析網頁彈跳錯誤的問題,在懷疑是不是TLS的版本問題,
又遇到Chrome到底要怎麼知道SSL/TLS版本要在那裡看的問題?
1. 首先呢,必須要到目標網站,以https://dictionary.cambridge.org/為例
2. Chrome瀏覽器要打開開發者模式(F12)
3. 查看Security的頁籤,就可以看到TLS的版本認証資訊了
Security的頁籤,可以看到加密版本資訊
Security的頁籤,可以看到加密版本資訊