CUBE SUGAR CONTAINER

技術系のこと書きます。

Python: Polars と NumPy / SciPy の関数を組み合わせて使う

Polars を使って数値を加工しようとすると、数学に関する API がさほど多くないことに気づく。 そうしたときに、最初に思いつくのは Series オブジェクトを NumPy 配列に変換した上で処理する方法かもしれない。 しかし、実際には Polars の Expr オブジェク…

Apple Silicon の macOS にコマンドラインで Rosetta 2 をインストールする

Apple の Rosetta 2 は、x86 アーキテクチャ向けにビルドされた macOS のアプリケーションを Apple Silicon の環境で実行できるようにするソフトウェア。 今回は、そんな Rosetta 2 をコマンドラインでインストールする方法について書いておく。 使った環境…

Python: CatBoost をいくつかの環境でベンチマークしてみる

今回は GBDT (Gradient Boosting Decision Tree) フレームワークのひとつである CatBoost について、いくつかの環境で同一のソースコードを使って学習にかかる時間を比較してみた。 きっかけは、最近入手した Apple M2 Pro を搭載した Mac mini が、どれくら…

Python: Polars の DataFrame をゼロコピーで Pandas の DataFrame に変換する

Polars の DataFrame は to_pandas() メソッドを使うことで Pandas の DataFrame に変換できる。 このとき、デフォルトではメモリのコピーが生じる。 pola-rs.github.io ただし、オプションとして use_pyarrow_extension_array=True を渡すとゼロコピーで変…

Python: Polars で各種エンコーダを実装したライブラリ「Shirokumas」を作った

最近は Polars が気に入っていて、主にプライベートで使っている。 ただ、エコシステムという観点では Pandas に比べて発展途上の段階にあると思う。 そこで、今回は発展の一助として「Shirokumas」というライブラリを作ってみた。 github.com どんなライブ…

Python: DuckDB と Polars を組み合わせて使う

DuckDB のバージョン 0.7 で Polars とのインテグレーションが強化された。 たとえば Polars の DataFrame に対して DuckDB の Python API で直接クエリを発行できるようになったらしい。 また、DuckDB で実行したクエリの結果を Polars の DataFrame に変換…

k3d (k3s) を使って Ingress と NetworkPolicy を検証する

Kubernetes を手元で検証しようとすると CNI (Container Network Interface) プラグインの機能が障壁になることがある。 たとえば kind を使う場合はデフォルトで kindnetd という CNI プラグインがインストールされる。 しかし、この CNI プラグインは動作…

Python: LightGBM の学習率と精度および最適なイテレーション数の関係について

勾配ブースティング決定木 (Gradient Boosting Decision Tree; GBDT) では、以下が経験則として知られている。 学習率 (Learning Rate) を下げることで精度が高まる 一方で、学習にはより多くのイテレーション数 (≒時間) を必要とする しかしながら、上記が…

Python: Polars で行・列が省略されないようにする

今回は Python のデータフレームライブラリの Polars で、データフレームを表示するときに行と列が省略されないようにする方法について。 結論から先に述べると、省略したくないときは pl.Config.set_tbl_cols() と pl.Config.set_tbl_rows() に負の整数 (た…

OpenSSH で過去に作った鍵の種類や長さを確かめる

今回は OpenSSH で過去に作った鍵の種類や長さを確認する方法について。 結論から先に述べると ssh-keygen(1) の -l オプションと -f オプションを組み合わせれば良い。 使った環境は次のとおり。 $ cat /etc/lsb-release DISTRIB_ID=Ubuntu DISTRIB_RELEASE…

Target Encoding のスムージングについて

Target (Mean) Encoding の出典は、2001 年の ACM SIGKDD Explorations Newsletter, Volume 3, Issue 1 に掲載された以下の論文らしい。 https://dl.acm.org/doi/10.1145/507533.507538 この論文には Target Encoding のスムージングに関する詳しい記述があ…

Python: PyTorch でバックプロパゲーションが上手くいかない場所を自動で見つける

PyTorch を使っていると、はるか遠く離れた場所で計算した結果に nan や inf が含まれることで、思いもよらない場所から非直感的なエラーを生じることがある。 あるいは、自動微分したときにゼロ除算が生じるようなパターンでは、順伝搬の結果だけ見ていても…

Python: TabNet を使ってみる

一般に、テーブルデータの教師あり学習では、勾配ブースティング決定木の性能の良さについて語られることが多い。 これは、汎化性能の高さや前処理の容易さ、学習・推論の速さ、解釈可能性の高さなどが理由として挙げられる。 一方で、ニューラルネットワー…

Linux でリンクアグリゲーション (LAG) を試してみる

リンクアグリゲーションは、複数のネットワークインターフェイスを束ねて扱う技術の総称。 たとえば、2 本のイーサネットを束ねて冗長化することで 1 本に障害が起こってもサービスを提供し続けることができる。 あるいは、フレームをロードバランスすること…

Linux TC (Traffic Control) の netem (Network Emulator) で劣悪なネットワーク環境を再現する

今回は Linux TC (Traffic Control) に実装されている netem (Network Emulator) という qdisc (Queueing Discipline) を使って、劣悪なネットワーク環境を再現する方法について書いてみる。 Linux TC は、文字通り Linux のトラフィックを制御するための機…

Ubuntu で iputils をビルドして異なるバージョンの ping(8) を使う

Ubuntu にインストールされている ping(8) の挙動が、バージョンによって微妙に異なることに気づいた。 そこで、あらかじめインストールされているのとは異なるバージョンをビルドして動作を確認することにした。 今回は、その手順についてメモしておく。 な…

Python: category_encoders の CatBoostEncoder を用いた OrderedTS の算出と多値分類タスクへの拡張について

データ分析コンペなどでよく利用される Target Encoding という特徴量抽出 (Feature Extraction) の手法がある。 これは、ターゲット (目的変数) の情報に基づいて、カテゴリ変数ごとの期待値を説明変数として利用するもの。 Target Encoding には、いくつか…

Python: Pandas で np.float16 はサポートされていない

まったく知らなかったんだけど、Pandas はカラムの型として NumPy の float16 (16 ビット浮動小数点型) をサポートしていない。 これは、以下の Issue で説明されている。 どうやら、プラットフォームによっては float16 を利用できないため対応が難しいらし…

pyenv を使って Ubuntu に複数バージョンの Python をインストールする

今回は Python のインストールマネージャである pyenv を使って、簡単に複数のバージョンの Python を Ubuntu にインストールする方法を書く。 Python でソフトウェアを開発する際には、バージョン間の差異に配慮する必要がある。 そのため、開発する環境で…

Ubuntu の APT で入る Python 仮想環境系のパッケージを使う

最近は Docker などのコンテナ技術の台頭もあって、プログラミング言語に固有の仮想環境を使う人は以前より減った印象がある。 とはいえ、手元でササッと検証するときなどには便利なことに変わりはない。 今回は、Ubuntu を使って APT で入る Python の仮想…

Ubuntu の APT で特定パッケージの依存関係を調べる

今回は Debian 系のパッケージ管理で使われる APT (Advanced Packaging Tool) で特定パッケージの依存関係を調べる方法について。 結論から先に述べると apt-cache depends サブコマンドと apt-cache rdepends サブコマンドを使って調べられる。 使った環境…

Multipass の仮想マシンで X Window System のアプリケーションを使う

今回は Multipass で作った仮想マシン上で X Window System のアプリケーションを使う方法について。 やり方としては、Multipass の仮想マシンに ssh(1) を使ってログインできるようにした上で X11 Forwarding すれば良い。 使った環境は次のとおり。 $ sw_v…

Vagrant の仮想マシンで X Window System のアプリケーションを使う

今回は Vagrant の仮想マシンで X Window System のアプリケーションを使う方法について。 これには、ローカルのマシンに X Server をインストールした上で、X11 Forwarding する必要がある。 使った環境は次のとおり。 Vagrant は ISA が x86 のマシンでし…

Ubuntu 22.04 LTS に後から GUI (X Window System) を追加する

サーバ版のインストールイメージを使ってセットアップした場合など、デフォルトで X Window System やデスクトップ環境が入っていないことがある。 しかし、後から必要になることも多い。 そこで、今回は Ubuntu 22.04 LTS にデスクトップ環境や X Window Sy…

RPM 形式のパッケージからファイルを取り出す

主に RHEL 系の GNU/Linux ディストリビューションで採用されている RPM 形式のパッケージファイルからファイルを取り出す方法について。 必要になってたまに調べることになるのでメモとして残しておく。 使った環境は次のとおり。 $ cat /etc/redhat-releas…

stress コマンドを使ってマシンに負荷をかける

stress(1) を使うと、Unix 系 OS で動作しているホストの CPU やメモリ、ディスクに簡単に負荷をかけられる。 今回は使い方や動作などを一通り見ていく。 使った環境は次のとおり。 $ lsb_release -a No LSB modules are available. Distributor ID: Ubuntu …

いつの間にか MLflow Tracking Server が Artifact のプロキシに対応していた

以前の MLflow Tracking Server では、アーティファクトを保存する場所については URI としてクライアントに伝えるだけだった。 クライアントは、サーバから教えてもらった URI に自分でつなぎにいく。 この形では、アクセスするためのクレデンシャルがそれ…

Linux の IPC Namespace について

Linux のコンテナ仮想化を実現する機能の一つに Namespace がある。 Namespace はプロセスが動作する際のリソースをカーネルの中で隔離 (分離) する仕組み。 Namespace は隔離する対象のリソースによって色々とある。 man7.org 今回は、その中でも IPC (Inte…

nvidia-smi(1) で GPU にパワーリミットを設定して消費電力や発熱を減らす

自宅にあるオンプレマシンでグラフィックカードを GPGPU の用途に使用していると、消費電力や発熱は切実な問題になりうる。 特に昨今は電気代の値上がりも著しいし、発熱は製品寿命の短縮や夏だと室温の上昇につながる。 そこで、今回は Linux の環境で nvid…

qrencode と viu を使ってターミナルで QR コードを作って表示する

情報共有などのために、ささっと QR コードを作って読み込ませたいときがある。 そんなときは qrencode と viu を使うとターミナル上で完結して楽そうだ。 使った環境は次のとおり。 $ sw_vers ProductName: macOS ProductVersion: 12.4 BuildVersion: 21F79…