[ハード] NVIDIA GeForce RTX 3050(8GB) と RTX 2060(12GB) を比較する

深層学習を使った画像認識アプリを開発しているのだけど、顧客向けにデモシステムを作ることになった。処理速度を短縮するために高性能のGPUが必要だ。というわけでGPUの物色を始めたのだけど、昨今のGPU価格高騰の煽りを受けて調達は非常に難しくなっている。アメリカ中を探し回れば高くても入手できないことはなさそうだけど、聞いたことが無いオンラインショップから買うのはちょっと怖いな。

ローカルにも店舗があるMicro Centerなら値段も品揃えも上々なので、購入予算を$500として、しばらくオンラインショップの在庫状況をウォッチしたところ、以下のGPUが候補となった。

  • NVIDIA GeForce RTX 3050 (8GB)
  • NVIDIA GeForce RTX 2060 (12GB)

スペック比較

メーカーサイトから情報を拾い読みして比較する。

ASUS Dual GeForce RTX 3050 8GB GDDR6
https://www.asus.com/Motherboards-Components/Graphics-Cards/Dual/DUAL-RTX3050-8G/

GeForce RTX™ 2060 VENTUS 12G OC
https://www.msi.com/Graphics-Card/GeForce-RTX-2060-VENTUS-12G-OC/Overview

RTX 3050 (8GB)

  • インターフェース: PCI Express 4.0
  • クロック: OCモード: 1807 MHz (Boost Clock), ゲーミングモード: 1777 MHz (Boost Clock)
  • CUDAコア数: 2560

RTX 2060 (12GB)

  • インターフェース: PCI Express 3.0
  • クロック: Boost 1680 MHz
  • CUDAコア数: 2176

数字を比べる限りは、3050のほうに分がある。

ベンチマーク比較

ベンチマーク結果を公開してくれているサイトから情報収集。

GPU(グラフィックボード)性能比較表【2022年最新版】 | PC自由帳
https://pcfreebook.com/article/459993300.html

3DMark Time Spy Graphcs

  • GeForce RTX 3050: 6278
  • GeForce RTX 2060 12GB: 7996

2060のほうが格段に数値が高い。2000シリーズより3000シリーズのほうが高性能だと思っていたので意外。ゲーム用途ではなくてCUDAのベンチーマーク結果を探したら以下のサイトがヒット。

CUDA Benchmarks – Geekbench Browser
https://browser.geekbench.com/cuda-benchmarks

  • NVIDIA GeForce RTX 3050: 73493
  • NVIDIA GeForce RTX 2060: 77964

こちらのサイトでも2060のほうが数値が高い。

結論

RTX 2060のほうが高性能(たぶん)と判断して、これを購入することに決める。

あと、いろいろ調べていて、後発でラインナップに追加されたRTX 2060の12GB版は、オリジナルのRTX 2060よりもCUDAコア数が多いことが分かった。オリジナルのCUDAコア数1920に対して12GB版は2176。

参考サイト

NVIDIA GeForce RTX 2060 12GB Has CUDA Core Count Rivaling RTX 2060 SUPER | TechPowerUp
https://www.techpowerup.com/289528/nvidia-geforce-rtx-2060-12gb-has-cuda-core-count-rivaling-rtx-2060-super

NVIDIA GeForce RTX 2060 12GB to feature 2176 CUDA cores, 184W TDP – VideoCardz.com
https://videocardz.com/newz/nvidia-geforce-rtx-2060-12gb-to-feature-2176-cuda-cores-184w-tdp

[Apache] Apacheの再起動の違い

Apacheの設定変更をした後、新しい設定を適用したいけど動いているサービスは止めたくない。そういう場合はどうすべきか。

Apacheの停止と再起動

以下、公式サイトの説明より。

急な停止

  • 即座に子プロセス全てをkillしようとする。
  • 子プロセスを完全にkillし終わったら親プロセス自身が終了する。
  • 処理中のリクエストはすべて停止され、もはやリクエストに対する応答はされない。

急な再起動

  • 子プロセスをkillするが、親プロセスは終了しない。
  • 設定ファイルを再読込して、ログファイルを全て開きなおす。
  • その後、新しい子プロセスを起動して応答を続ける。

緩やかな停止

  • 親プロセスは子プロセスに現在処理中のリクエストの後に終了するようにアドバイスする。
  • その後親プロセスはPidFileを削除し、ポートでのListenを全て停止する。
  • 親プロセスはどの子プロセスがリクエスト処理中かを監視し続ける。
  • 全ての子プロセスが終了するかGracefulShutdownTimeoutで設定した時間が過ぎると、親プロセスも終了する。

穏やかな再起動

  • 子プロセスに現在のリクエストの処理の後に終了するようにアドバイスする。
  • 親プロセスは設定ファイルを再読込して、ログファイルを開き直す。
  • 子プロセスが徐々になくなるに従って、 新しい世代の設定による子プロセスに置き換えていく。
  • そして、これらが新たなリクエストに即座に応答し始める

冒頭に書いたようなシチュエーションの場合、「穏やかな再起動」が適当だな。

参考サイト

Apache HTTP Server の停止と再起動 – Apache HTTP サーバ バージョン 2.4
https://httpd.apache.org/docs/2.4/ja/stopping.html

restartとreloadの違いを調べてみた – Qiita
https://qiita.com/miyuki_samitani/items/79ddc6bf645f51aab03d

[C#] 名前空間の指定 (C# 10)

名前空間の宣言はnamespaceキーワードを使って以下のように行う。

それが、C# 10以降では以下のように指定できるようになった。コードの可読性が上がったか。

参考ページ

名前空間で型を整理する | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/fundamentals/types/namespaces

[C#] 最上位レベルのステートメント (C# 9)

自分のC#の知識が古いバージョンで止まっているので、新しい仕様をキャッチアップしていく。

C# 9以前では、C#プログラムのエントリポイントを以下のように記述する必要があった。

C# 9以降では、以下のようにMainメソッドを省略し、Mainメソッド内にあるかのようにC#ステートメントを記述することができる。これを最上位のステートメントと呼ぶらしい。

以下、留意点。

最上位レベルのファイルは1つだけ

アプリケーションに含めるエントリポイントは1つだけなので、プロジェクト内には最上位のステートメントを含むファイルは1つだけにすること。複数存在するとコンパイルエラーになる。

エントリポイントは他に用意しない

最上位レベルのステートメントとMainメソッドを混在させないこと。混在させるとコンパイルエラーになる。

usingディレクティブ

以下のようにファイルの先頭に指定する。

グローバル名前空間

最上位レベルのステートメントは暗黙的にグローバル名前空間に属する。

コマンドライン引数 (args)

コマンドライン引数が入力された場合、args 変数を参照してそれにアクセスできる。

await

await を使用して非同期メソッドを呼び出すことができる。

プロセスの終了コード

アプリケーションの終了時に int 値を返すには、int を返す Main メソッドの場合と同じように、return ステートメントを使用する。

参考ページ

最上位レベルのステートメント – Main メソッドを使用しないプログラム | Microsoft Docs
https://docs.microsoft.com/ja-jp/dotnet/csharp/fundamentals/program-structure/top-level-statements

[Docker] チュートリアルのインストール

Dockerデスクトップを初回起動したときにはチュートリアルへ案内されるので、[Start]ボタンを押してチュートリアルをインストールする。

OPEN IN BROWSER アイコンをクリックすると、ブラウザが開いてチュートリアルのページが表示される。
http://localhost/tutorial/

チュートリアルをなぞって知識を入れていこう。

[Docker] Dockerデスクトップのインストール

公式サイトからダウンロード。

Get Started with Docker | Docker
https://www.docker.com/get-started

Windows版をダウンロード: Docker Desktop Installer.exe

ダウンロードしたインストーラを起動して画面の指示に従う。

[Close and log out]をクリックするとWindowsからログアウトされる。

再びログインすると、Docker Desktopが自動起動されて以下のメッセージが表示される。

自分はpersonal useなので無料利用が可能ということか。I accept the termsをチェックして[Accept]をクリック。

[AWS] Route 53/TXTレコードを複数作成するには

既にSPFを定義するTXTレコードが存在する状態で、外部サービスのベリフィケーションのためにもう1つTXTレコードを追加しようとしたら以下エラー。

TXTレコードを複数登録したいケースは少なからずあるはずだ、何か方法があるに違いない、そう思ってググってみたら以下の記事がヒット。

Route 53のTXTレコードに複数値を登録できますか?への対処法 | DevelopersIO
https://dev.classmethod.jp/articles/route53-txt-multiple/

解決する方法
解決策としては既存のレコードに改行をして複数行入力する方法で解決ができます。
この場合1点の注意が必要です。
* レコード(値)を識別するためダブルクォーテーション(“)で囲む
* レコード(値)は1行毎に改行して入力する

記事に倣って設定し、念のためnslookupにてレコードを確認。

できた。

[C#] Image.FromFile()はファイルをロックするので要注意

画像ファイルをロードしてImageオブジェクトを作成するために以下のようなコードを書いた。

すると問題が。ロード完了しても画像ファイルを削除することができないのだ。どうやらファイルがロック(占有)されているみたい。

ネットを調べても「これだ」といった情報はなかなか見つからず。しばらく探したら参考サイトの記事がヒットした。Image.FromFile()メソッドの仕様ということなのかなぁ。

回避するには、以下のようにファイルストリームから読み取るなどして、Image.FromFile()メソッドを使わないこと。

参考サイト

表示中の画像ファイルが削除できない問題の解決法 – .NET Tips (VB.NET,C#…)
https://dobon.net/vb/dotnet/graphics/drawpicture2.html

[インフラ] 家庭用インターネットでスタティックIPを取得する費用 (米国)

先日我が家のインターネット回線をCATV会社のケーブルモデムから電話会社のファイバーに替えた。その会社は商魂たくましく、テクニシャンと営業が組んで客先を訪れるルールのようで、テクニシャンが作業している間に営業が携帯電話まで売り込んでくる。うざいのでこちらの興味に話を振って「家庭用の回線でもスタティックIPって取得できるのか」尋ねたところ、できるけど費用とか細かいことわからないのでサポートに電話して聞いてくれとのこと。

回線は無事に開通して何日か経ってからそのことをふと思い出して、サポートページを検索したら内容と費用が出てきたので、いつか必要となるときのために覚え書き。

– スタティックIPアドレス 5個 (ブロックサイズ8の場合)
– 初期費用 (ゲートウェイの設定) $99
– 月額 $15

参考サイト

About Static IP Addresses – Internet Customer Support
https://www.att.com/support/article/u-verse-high-speed-internet/KM1002300

Cost and availability of Static IPs | AT&T Community Forums
https://forums.att.com/conversations/att-fiber-ordering/cost-and-availability-of-static-ips/6027058acc9b580936b84e28

[AWS] Amazon Linux のサポート期限

現在EC2インスタンスを作成するときに選択できるAmazon Linuxは「Amazon Linux 2」である。だけど、ちょっと前(?)まではAmazon Linuxだったので、運用しているEC2インスタンスの中にはAmazon Linuxベースのインスタンスもある。

Amazon Linuxはいつまでサポートされるんだっけ?と、たまに心配になるので以下覚え書き。

Update on Amazon Linux AMI end-of-life | AWS News Blog
https://aws.amazon.com/jp/blogs/aws/update-on-amazon-linux-ami-end-of-life/

End-of-life Extension
The end-of-life for Amazon Linux AMI is now extended to December 31, 2020: until then, we will continue to provide security updates and refreshed versions of packages as needed.

Maintenance Support
Update Feb 19, 2021 – Beginning January 1, 2021, the Amazon Linux AMI entered a new maintenance support period that extends to June 30, 2023.