Windows Subsystem for Linux 2でCUDAを使えるようにする

1.cuda toolkitをインストール

sudo apt-key adv --fetch-keys 
http://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64/3bf863cc.pub
cat <<EOF | sudo tee /etc/apt/sources.list.d/cuda.list
deb https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2004/x86_64 /
EOF
sudo apt update
sudo apt install cuda-toolkit-11-5

2.libcudnn8、libncclをインストール(任意)

sudo apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64/7fa2af80.pub
cat <<EOF | sudo tee /etc/apt/sources.list.d/cuDNN.list
deb https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu2004/x86_64 /
EOF
sudo apt update
sudo apt install libcudnn8 libnccl-dev

3.動作確認

Tensorflowをインストールする。

pip install --upgrade tensorflow

以下を実行する。

from tensorflow.python.client import device_lib

device_lib.list_local_devices()

実行結果の一部に下記が表示されていれば正常に導入できている。

 name: "/device:GPU:0"
 device_type: "GPU"

Windows上にPythonの開発環境を構築する

前提

Windows Subsystem for Linuxを設定し、Ubuntuのインストールが済んでいること。

1. VSCodeをインストール

Windows版をダウンロードし、インストールする。
Windows Subsystem for Linuxがインストール済みであれば、初回起動時に下記が表示されるため、インストールする。

一度、VSCodeを終了し、Ubuntuコンソール上で下記を実行する。

code .

VSCodeが起動した後、下記の「Python」をクリックして、インストールする。

Python 拡張機能のインストールが完了すると、さらに下記が表示されるので、インストールする。

2. 動作確認

VSCode上で下記の通り記入したhello.pyファイルを作成する。

msg = 'Hello World'
print(msg)

Run Python File in Terminalをクリックし、実行結果が表示されれば動作確認完了。

xxx@xxx:~/test$ /usr/bin/python3 /home/xxx/test/hello.py
Hello World

Windows Subsystem for Linux 2でPythonを動かす

1. Windows Subsystem for Linuxをインストール

Windows Power Shellを管理者権限で開き、下記を実行する。

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux

WSL 2を使用するため、仮想マシンプラットフォームを有効化する。

Enable-WindowsOptionalFeature -Online -FeatureName VirtualMachinePlatform

x64 マシン用 WSL2 Linux カーネル更新プログラム パッケージをインストールする。

デフォルトバージョンを2とする。

wsl --set-default-version 2

2. Ubuntu Linuxをインストール

Microsoft StoreからUbuntuをインストールする。

3. WSLのバージョン確認

> wsl -l -v
  NAME      STATE           VERSION
* Ubuntu    Running         2

4. Pythonのバージョン確認

Ubuntuをインストールした場合、Python3が既にインストールされている。

$ python3 --version
Python 3.8.5

Token authentication requirements for Git operations

Githubから以下のようなメールが届いた。どうやら、2021/8/13でパスワードによる認証が出来なくなるらしい。

[GitHub] Deprecation Notice
Basic authentication using a password to Git is deprecated and will soon no longer work.
※詳しくはこちらのURLを参照。

当方ではEclipseでpush/pullするときにパスワード認証を使用しているので、Token authenticationを使用するように変更する。(Jenkinsでパスワード認証を使用している場合も同様の設定が必要になる)

Github側の設定

  1. Settings > Developer settingsのPersonal access tokensを開き、Generate new tokenをクリックする。
  2. 必要な権限にチェックを入れ、Generate tokenをクリックする。
  3. 作成されたtokenをコピーしておく。

Jenkins側の設定

  1. プロジェクトの設定画面を開き、認証情報の追加をクリックする。
  2. 先ほどコピーしたTokenをパスワードに入力する。

Eclipse側の設定

  1. 先ほど生成したTokenをパスワードに入力する。

Eclipse起動構成の移行方法

起動構成のエクスポートは実行構成のウィンドウにボタンがあるので分かりやすかったのだが、インポートが分かりづらかったので、メモを残しておく。

エクスポート方法

1.メニューの実行>実行構成をクリックする。
2.左上のエクスポートボタンをクリックする。

3.保存先、エクスポート対象を選んで完了をクリックする。

インポート方法

1.メニューのファイル>インポートをクリックする。
2.インポート・ウィザードから起動構成を選択して、次へをクリックする。

3.起動構成を保存してあるフォルダを選択し、インポート対象を選び完了をクリックする。

vue/cliを3.xから4.xにアップグレードする

最新バージョンを確認する。

D:\>npm outdated
Package                 Current  Wanted  Latest  Location
@vue/cli-plugin-babel    3.12.1  3.12.1   4.1.1  crawler-client
@vue/cli-plugin-eslint   3.12.1  3.12.1   4.1.1  crawler-client
@vue/cli-service         3.12.1  3.12.1   4.1.1  crawler-client

メジャーバージョンは、npm updateでは更新されないので、以下のコマンドを実行する。

D:\>vue upgrade
  Gathering package information...
  Name                    Installed       Wanted          Latest          Command to upgrade
  @vue/cli-service        3.12.1          3.12.1          4.1.1           vue upgrade @vue/cli-service
  @vue/cli-plugin-babel   3.12.1          3.12.1          4.1.1           vue upgrade @vue/cli-plugin-babel
  @vue/cli-plugin-eslint  3.12.1          3.12.1          4.1.1           vue upgrade @vue/cli-plugin-eslint
? Continue to upgrade these plugins? (Y/n) Y

他にも、

Package            Current  Wanted  Latest  Location
eslint              5.16.0  5.16.0   6.7.2  crawler-client
eslint-plugin-vue    5.2.3   5.2.3   6.0.1  crawler-client
sass-loader          7.3.1   7.3.1   8.0.0  crawler-client

などを個別にアップグレードする場合は、以下のコマンドを実行する。

D:\>npm install --save-dev sass-loader@8

以下のようにワーニングが出た場合は指示に従ってインストールする。

npm WARN sass-loader@8.0.0 requires a peer of node-sass@^4.0.0 but none is installed. You must install peer dependencies yourself.
npm WARN sass-loader@8.0.0 requires a peer of fibers@>= 3.1.0 but none is installed. You must install peer dependencies yourself.

D:\>npm install --save-dev sass fibers

Spring Tool Suite(Eclipse)のデフォルトのworkspaceを変更出来ない時の対処法

Spring Tool Suiteの設定を変更してもworkspaceが、 「~/Documents/workspace-spring-tool-suite-4-4.4.0.RELEASE」から変更できない場合は、 インストールフォルダ下のconfiguration\config.iniファイルを開き下記1行を削除すれば良い。

osgi.instance.area.default=@user.home/Documents/workspace-spring-tool-suite-4-4.4.0.RELEASE

Coverallsをopenjdk11環境で使用する

ビルド環境をopenjdk11に変更したら、coveralls-maven-pluginが落ちてしまって、Coverallsのカバレッジが更新されなくなっていた。

coveralls-maven-pluginに以下の依存関係を追加することで回避することが出来る。

<dependencies>
    <dependency>
        <groupId>javax.xml.bind</groupId>
        <artifactId>jaxb-api</artifactId>
        <version>2.3.1</version>
    </dependency>
</dependencies>

本家がJava11に対応してくれるのが一番良いのだが、忙しいみたいでいつ対応されるかわからない。

Travis CIでMySQL 5.7

Travis CIのMySQLが5.7になって、Timestamp型の0は許容しなくなった。
そこで、.travis.ymlファイルのbefore_scriptの1行目に「set global sql_mode = ”」を追記した。

before_script:
 - mysql -e "set global sql_mode = ''"
 - mysql -uroot -e "create database crawler"
 - mysql -uroot crawler < src/config/schema.sql

Jenkinsで自動デプロイ

※2022/05/05追記:Mavenでデプロイするのではなく、Jenkinsのプラグインを使用してデプロイする方法はこちら

Jenkinsから自動的にTomcatへデプロイする。

  • Tomcat側の設定
    1. apache-tomcat-8.5.28/conf/tomcat-users.xmlを以下の通り編集する。
<tomcat-users xmlns="http://tomcat.apache.org/xml" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemalocation="http://tomcat.apache.org/xml tomcat-users.xsd" version="1.0">
    <role rolename="manager-script">
        <user username="任意のユーザ名" password="パスワード" roles="manager-script">
        </user>
    </role>
</tomcat-users>
  • Jenkins側の設定
    1. 実行ユーザの/.m2/settings.xmlを以下の通り編集する。
    2. プロジェクトの設定を開き、Mavenのゴールの設定に「tomcat7:redeploy」を追記する。
<settings>
    <servers>
        <server>
            <id>tomcat-localhost</id>
            <username>任意のユーザ名</username>
            <password>パスワード</password>
        </server>
    </servers>
</settings>

ユーザ名、パスワードはTomcatの設定と合わせること。

  • Maven側の設定
    1. pom.xmlに以下を追記する。
<plugin>
    <groupid>org.apache.tomcat.maven</groupid>
    <artifactid>tomcat7-maven-plugin</artifactid>
    <version>2.2</version>
    <configuration>
        <path>/common</path>
        <server>tomcat-localhost</server>
        <url>http://localhost:8080/manager/text</url>
    </configuration>
</plugin>

serverはsettings.xmlのidと合わせること。