White scenery @showyou, hatena

If you have any comments, you may also send twitter @shsub or @showyou.

Versa H17 と m75q-1 tiny

Versa H17は以前Geforce GTX 1060を別のケースに入れようとした時に、入らなかったので購入しました。確か送料込みで2700円くらいと激安。その割にはストレージの固定場所などしっかりしていて、前面端子と横幅広いのを除けばいい出来だと思います。これにRyzenGeforce GTX 1060入れてます。

ただこれだと引っ越し等で持ち運ぶのが大変なのと、ちょうど価格も割安でガジェット好きの間で有名になっていたので、m75q-1 tinyを購入しました。

詳細はこちら(https://www.ragemax.com/2020/01/m75q-1-tiny.html)の記事をご覧になればわかるかと思いますが、

  • nucを一回り大きくした程度のサイズ
  • Ryzen5 3500GE
  • 8GB DDR4 SO-DIMM
  • 128GB M.2 SSD
  • ギガビット有線LAN
  • Windows 10 Home
  • HDMI 
  • Intel 無線LAN 
  • 縦置きスタンド

以上の構成で、大体37000円程度でした(注:価格com限定モデルにしないとCPUが残念になります)。

下の写真は左がH17で右がm75q-1 tinyです。H17が大きいというのもあるんですが、ひと目でm75q-1 tinyの小ささがわかると思います。

f:id:showyou:20200307203628j:plain

左H17, 右m75q-1 tiny

1月末に予約して、当初は春節やコロナウィルスの影響もあって、発送が3月中旬となってました。それが2月末になって、急に翌日届くということになりました。

んでWindows環境でポチポチ操作してますが、色々速いですね。CPUもRyzenの4コア8スレッドで、GPUintelのCPU内蔵に比べ相当速いらしいので、重いゲームをしなければこれで十分な気もします。

さて、他にもRyzen7 3700XとGeforce 1080 Ti積んだ高火力マシンがあるんだけど、H17マシンどうしよう・・

10年間溜まったPython2 Twitter botの技術的負債を返済した話

(この記事は以前Qiitaに書いたものの転載になります) この記事はPython2アドベントカレンダー(https://qiita.com/advent-calendar/2019/python2 )の12/23分の記事です。(え?Python2ってPythonアドベントカレンダーって意味で、Python2のカレンダーじゃないんですか?)

TL;DR

Python2で動いてたシステムをPython3で動くようにしましている最中です

はじめに

10年ほど前に、Twitterで自動的に応答する人工無脳を作成しました。この人工無脳マルコフ連鎖によるテキストの自動生成と、特定の文字列に対する返信する機能をもっていました。

https://twitter.com/ha_ma

しゅうまい君ほど注目は浴びていないですが、一時期は(自分の知らない間に)NHKに取り上げられたりはしました。その時身につけたデータ収集に関する知識や自然言語処理の初歩知識等は、その後のキャリアに生かされております。 その後、東日本大震災の影響もあり自宅でマシンを常時稼働しておく余力も無くなったため、テキストの自動生成機能は止めて応答機能だけ残しております。 そうこうして10年近く回してきたのですが、Python2が2020年1月でメンテされなくなるのと、Python3の機能がそろって来たのとあり、Python3を中心としたシステムに置き換えることにしました。

構成

Before

After

ソース: https://github.com/showyou/docker-chatbot-lite/tree/add_db 使用に当たっては設定が必要なのと、一部まだ不完全なので、そこを後ほど修正します。

移行にあたって

Python2->3への移行は、割と簡単でした。ただし条件がありまして、Mecabを現在動かしてないのでその部分の移行は行っておりません。 うちのシステムの場合、Python2から3へ移行した時に変更した箇所は、次の部分くらいです。 - Print関数に()をつける - Unicode関数を削る

SQLAlchemyをバージョンアップさせた際にも、少し手直しが発生しました。 - BigIntegerが桁数を引数に取らなくなっているっぽいので、引数削除

他にも - tweepyのauth.access_token.keyがauth.access_token, 同access_token.secretがaccess_token_secretへ変わってるので変更

KVM(QEMU)からdockerへ

これは別にコード化してモダンにしようと思ったわけではありません。Ubuntuをアップデートした時にQEMU仮想マシンのネットワーク機能がおかしくなり、否が応でも変えざるを得ないからでした。

Serverlessについて

今動かしてる部分のコードであれば、データを貯めるDBさえなんとかなれば自分のサーバは破棄してAmazonとかのFunctionサービスあたり使ってもいいかもしれません。ただしバッチで既存のデータを学習させるのに使えるのかどうかは怪しいところです。

JenkinsからDigdagへ

digdagのWebUIに認証機能がないので、セキュリティ的にはかなり心配です。

Python2を使うか3を使うか

時期の問題はあります。少なくとも今から新規で開発するのにPython2はありえないです。しかしPython3出たての頃は、色々機能が足りない部分があったりしたので、早期に「Python3に移行しろ」って言ってた人は筋違いだと感じます。

最後に

ありがとう、さようならPython2

・・と思ったらサポートが2020/1から2020/4まで延長してるんだけど!どういうことだよ! http://pyfound.blogspot.com/2019/12/python-2-sunset.html

参考

https://qiita.com/kojisuganuma/items/15a6c50c05d80fbd60b1 https://qiita.com/kanga/items/7f2849ad5a2a625a662c

12/24追記

  • digdagをコンテナに入れて
  • 同じdockerクラスタmysqlのコンテナを入れて
  • digdagからbotのコンテナを起動する

場合、botのコンテナとmysqlのコンテナでネットワークが違って繋げないように見えるのですが、いかがなのでしょうか・・ f:id:showyou:20200328122640p:plain

DockerでGeforceを使ってSpleeterを回す

(この記事は以前Qiitaに投稿したものの転載になります。)

Spleeter(https://github.com/deezer/spleeter) という、python+Tensorflowを使った、音声分離アプリケーションがあります。これを使うと楽曲のファイルからヴォーカルだけを抜き出したりできます。

使い方も上のサイトやこちらに書いてあったりするのですが、nvidia-dockerが古いだとか、GPU使ってないだとかで決め手に欠けています。ですので今まとも?な方法のメモ書きを残します。(本当は漏れのない手順書を書きたいとこでしたが、実施から時間が経って記憶から抜けている部分もあります・・)

自分で構築するのが面倒な人は、参考の1, 2を使うとよいでしょう。ただし録音に使ったデータがクラウド上に保存されるのかどうかは保証できません。

動作確認環境

  1. AMD Ryzen 3700X
  2. ASRock B450M Steel Regend
  3. メモリ: 32GB
  4. (ブランド不明)Geforce GTX 1080Ti
  5. Ubuntu 18.04 server
  6. nvidia公式driver

導入手順

ホストマシン(Dockerを呼び出すマシン)にnvidiaの公式ドライバを入れます。おそらくCUDAドライバあたりも必要です。

  • Docker ceを入れる

最新のnvidia-dockerがDocker ce 19.03を要求するので、入れます。Ubuntu標準dockerではダメです。 https://docs.docker.com/install/linux/docker-ce/ubuntu/

最近のはnvidia-docker2がdeprecatedされており、最新のnvidia-dockerではspleeterに書かれているコマンドでは実行出来ないので注意してください。

https://github.com/NVIDIA/nvidia-docker/wiki/Installation-(Native-GPU-Support)

  • spleeterを入れて使う

https://github.com/deezer/spleeter/wiki/2.-Getting-started#using-docker-image

nvidia-dockerではなく、docker run --gpus all等を使う必要があります(allは手持ちのGPUによって変えてください)。

例: docker run --gpus all -v $(pwd)/output:/output deezer/spleeter:gpu separate -i audio_example.mp3 -o /output

参考

  1. spleeter使って分離してくれるサービス https://moises.ai/

  2. Spleeterを簡単に使えるGoogle colaboratoryのノートを作成しました. https://qiita.com/Ryo0o0oOO/items/65acd38f4034800388c0

ベンチマークでCPUを出す時は型番を出して欲しい

(この記事は以前Qiitaに掲載していたものの転載です) ポエムというか戯言です。

自作PC以外のベンチマークでたまに CPU: Core i5 2GHz とか書いてる記事があるんですが、可能でしたら型番を書いてほしいです。

いい例

  1. Core i5-2500
  2. MacBookAir 2018late(Core i5 1.6GHz)
  3. AWS EC2 c5.4xlarge

だめな例

  1. Core i5 2GHz
  2. Core i5 2GHz 4コア

なぜダメか

同じCore i5、同じ周波数でも型番が違うだけで - 一回の動作辺りの処理能力が違う - 物理コア数が違う - 命令セットの装備が違う といったことがあったりします。

例として、鵜呑みできるかどうかは怪しいですが、ベンチマークの結果を貼っておきます。Core i5-2500KとCore i5-9400Fの比較です。

https://www.cpubenchmark.net/compare/Intel-i5-9400F-vs-Intel-i5-2500K/3397vs804

ベース周波数だけ見ると2500Kは3.3GHz, 9400Fは2.9GHzなのでCore i5 3.3GHzとだけ書くと一見早そうです。しかしCPUMark Totalの結果は9400Fの方が2倍くらい高いです。

これはCPUの世代が進んで効率がよくなったとか、命令セットが追加されたんで効率よくなったとか、そもそもコア数が4と6で違うとか、色々上げられます(Turbo burstとかもあるんですがここでは割愛)

上の細かいとこは置いといても、手元の環境で実行しようとしたときに同じものが用意しづらいって意味でも型番は書いておいた方がいいです。

CPUの型番さえ書けばいいか?

もちろん違います。HDDをSSDに変えるだけでも、ディスクを介した処理は大幅に変わってくるでしょう。それにメモリとか、極端な話マザーボードが違うだけでも性能が変わってきます。がSSDやメモリはともかく、マザーボードの型番まで求めるのは流石に酷かなという気はします。あと昔は同じ型番でもロットによってオーバークロックの性能が違ったりとかありましたが、そこも流石に(略)。

また全く同じパーツを使っていても、OSやライブラリが違うだけでも性能は変わります。

いい例を振り返って

上の方でいい例について書きました。なぜいいかを解説していきます。当然ですがCPUに関していいと言っているだけで、これだけで全部いいわけではありません。

1は自明です。型番を見ればコア数、周波数などがメーカーのサイトから導き出せます。2に関しては型番は無いですが、2018年に出たMacBookAirのこの周波数のモデルは一つしかないと思われるため、問題ないでしょう。3は正直悩みどころで、同じEC2のインスタンスでも使ってるCPUが違ってたり、そもそもXen等のハイパーバイザからCPUへの割当が同等なのかっていうのもあったりします。ただ最悪インスタンスの種類さえわかっていれば追試はできると思うのでよしとしました(本当はcat /proc/cpuinfoくらいはしてほしいです)。

8年ぶりにUshahidiを起動して、千葉の災害情報を共有するサービスを立ち上げた

(この記事はQiitaに以前投稿したものの転載になります。また現在は共有サイトは上げていません。)

要約

http://showyou41.mydns.jp の接続先に、Ushahidiという位置+情報を共有するサイトを立ち上げました。アクセスも分類してくれる人も足りないです。

Ushahidiとは?

https://www.ushahidi.com/

PHPで記述されたオープンソースの、位置情報+情報共有システムです。2011年に東日本大震災が起きた直後、sinsai.infoというサイトが有志で立ち上げられ被災状況の共有に使われていましたが、これを運営していたエンジンがUshahidiになります。これを立ち上げるにあたって、"糸柳が自宅でサーバに挟まれた"というデマTweetをみんなで面白がって拡散したって話もあるんですが、省略。

Ushahidiの立ち上げ方

なぜかこれの記述が、軽くググっても載ってないので書いておきます。といいましてもgithubに書かれてる内容実行すればいいんですが・・

$ git clone https://github.com/ushahidi/platform-release.git
  • cd platfrom-release
  • (公式未記載なので注意。必ず実行すること) docker-compose.ymlのうち、以下の部分を変更
...
MYSQL_USER: ushahidi
MYSQL_PASSWORD: ushahidi
...
MYSQL_USER: ushahidi
MYSQL_PASSWORD: ushahidi

のushahidiの部分。変えないとハッカークラッカーが乗っ取りにやってきます。

  • docker-compose up -d

-d付けなければ、ターミナルを閉じた瞬間にdockerプロセスが多分終了します。

立ち上げたら80番ポートにアクセス(localのdockerで立ち上げたならhttp://localhost とか)で接続できます。接続したら直ぐにadminのユーザ/パスワードを変えてください。

Twitterの設定があるので、OAuthの認証キーを入れると一応定期的にTweetを収集してくれます(後述)。

困ったところ

  • アクセスが無い。来るのはphpMyAdminwordpress脆弱性狙う人たちだけ。周知大事
  • これはsinsai.infoが終わった原因にもありそうですが、上がってきたTweetを正確/ガセと判断するのに労力がかかります。ある程度公的な機関なら信用するとか、ナイーブベイズ使って自動で判断するとかあるんですが、phpとは相性よくないですね
  • 手動で分類する時にTweetを眺めてますが、災害に絡めて政治の話が書かれてるのはどちらの側でも疲れます
  • Tweetの収集能力が明らかに弱い気がします。同じOAuthのkeyでPython3+Tweepyで収集した時に比べ、数分の位置ぐらいしか取れてない気がします。なぜ?
  • 以上のことから、DBにTweet貯める部分まではPythonで書いて、機械学習もさせたい気分です
  • 全然関係ないですが、なぜかnginxのポートフォワード機能が働かないです。別ので転送させました

結論

誰か分類か宣伝手伝ってもらえると有り難いです。興味ある方いらっしゃいましたら https://twitter.com/shsub まで連絡ください。

余談

今回の災害では、マスコミもそうなんですが、GとかY!とかWebのでかいとこも収集プラットフォームを用意してない気がします。情報共有が円滑に進むのはまだまだ遠い気がします。

あとこれは東日本大震災の時に思いっきり露呈したことですが、インフルエンサーが適当にピックアップするのは全く頼りになりません。

更に言うと寄付をふるさと納税で行う動きが出てますが、少し待ったほうがいいかもしれません。といいますのも、京アニの件を当てはめて考えますと、

  • 自治体に対して直接寄付できる口座が用意される(かも)
  • ふるさと納税は税金控除額の上限が低い一方、寄付金が控除の対象となった場合、寄付したほうが税金的に有利
  • ふるさと納税はどこかのサイトで行った場合、おそらく手数料が納税額から差っ引かれます(逆に取らないと運営していけないだろうし。ただし未検証)

 

Ryzen 7 3700Xに換装しました

4月末にRyzen 7 2700X(がピン折れてRyzen 5 2600)の構成で組みました。

https://scrapbox.io/showyou/20190430_PC%E6%96%B0%E8%AA%BF

特に性能面で不満はなかったんですが、Ryzen 3700Xの評判が良さげで在庫があったのと、消費税増税を控えて(とは言え2%増える程度じゃ1000円程度しか上がらず、初売り特価の終わりによる値下がりの方が大きそうですが)

構成は上とほぼ同じで、

  • CPU:Ryzen 7 3700X
  • メモリ:Crucial W4U2666CM-16G x2 合計64GB
  • マザボ:ASRock B450M Steel Regend

です。

CPUとしては3200MHzのメモリに対応しているようですが、4枚構成だと早くても2933MHzが保証の範囲内では限界です。

マザボBIOSが1.0でRyzen 7 3700Xに非対応でしたので、USBメモリをつないで2.6あたりまで上げてからCPUを交換しました。Ryzen 9 3900Xにも対応してるようですが、そこまで上げなくてもいいかなという気分ではあります(マザボ1万にCPU6.5万とか・・)

これであと5~10年は持ちそうですね。他のデスクトップマシンは未だにSandy/Ivy Bridgeだったりします。

画像に文字を書く方法

(この時期はQiitaに2019年08月07日に投稿したものです) https://qiita.com/youwht/items/c2e60c63625dfb6817dd

上の物をつかって、画像を文字にしてみました。 著作権的にあれなんで、gistのURLだけ貼っておきます。やばかったらgistも消します。

Google Colaboratoryはブラウザがあれば誰でも動かせるので、ご自身でも試しに動かしてみてください。

https://gist.github.com/showyou/5eb98aea8070c7c87bec637c11026fc4