動かざることバグの如し

近づきたいよ 君の理想に

赤本名言

赤本名言

2017年の赤本が名言だったのでメモ

はしがき

大学入試の季節が近づいてきた。寒い雪の日の朝、電車の中で受験生と思しき若者が単語帳を開いているのを見るにつけ、もうかれこれ数十年前になるが、かって自分自身が受験生だった時の姿を重ねてしまう。

高校三年生の冬、受験に失敗した。後で振り返ると、漫然と塾や予備校に通い、基礎もできていないのにレベルの高い参考書に手を出し、やった気になっていた。実際はたいして勉強していないのに根拠のない自信と慢心があって、案の定それはもろくも打ち砕かれた。大学で何をやりたいのかさえはっきりしないまま、よく考えずに志望校を決めていた。

浪人して改めて自分を見つめ直し、多くの本を読んだ。1年間の計画をしっかりと自分で組み立てたいと考え、自宅浪人の道を選んだが、思い返せば、悶々ともがき苦しみ、天井を眺めてはのたうち回るような日々であった。自分を見失い、自堕落な毎日をすごすこともあったが、試行錯誤の中でなんとか目標を見定め、少しずつ自分のペースをつかめるようになっていった。

受験当日のことはほとんど覚えていないが、手応えはあったものの、自信があるというわけではなかった。合格発表の日もすぐに見に行く勇気がなく、行ったときには既に掲示板のまわりは閑散としていたが、しばらくその場にたちつくして離れることができなかった。

大学受験はあくまでも人生における通過点にすぎず、それ自体が目的ではないのだが、受験を通して身についたこと、学んだことはもちろん、様々な努力と試行錯誤重ねた経験は、将来なんらかの形で人生の支えとなるかもしれない。雪の日に受験生を見かけるたびに、もう一度やり直せと言われてもできないような濃密な日々を懐かしくおもいだすのである。

最後になったが、家族や友人など、支えてくれる周囲の人たちへの感謝を忘れず、受験本番で持てる力を存分に発揮できるよう健康管理にも十分に注意し、見事合格の栄冠を勝ち取られることを願ってやまない。

編者しるす

picture 0

あすけんの女の存在しない記憶を生成AIでつくる

存在しないあすけんの女の記憶を作りたい

あすけんの女とは

健康管理アプリ「あすけん」に登場するマスコットキャラクター。AI栄養士さんらしい。アプリトップページに登場し、色々アドバイスくれる。

picture 0

余談だが「未来(みき)」さんってちゃんと名前あるらしい。今回画像収集するまで知らなかったw

やりたいこと

で、 なんとなくあすけんの女こと未来さんのチアリーダー姿を見てみたいと思ってしまった。が当然画像検索しても無い。

ならば生成AIで作るしかない

画像収集

公式サイトの画像だと解像度が低すぎて学習に使えないので、Google画像検索とツイッター検索を駆使してなんとか32枚の未来さんの画像をゲットした。

picture 1

あとはこれの背景を消してタグ付けし、学習

学習にはおなじみkohya-ss/sd-scriptsでモデルは当然animagine-xl-3.1を使用した。

config.tomlは以下

[general]
seed = 99
pretrained_model_name_or_path = "/app/models/animagine-xl-3.0.safetensors"
save_model_as = "safetensors"
xformers = true
mixed_precision = "bf16"
save_precision = "bf16"

[network]
# SDXLはテキストエンコーダーを学習せずにUnetのみ
network_train_unet_only = true
# cache_text_encoder_outputs = true
network_module = "networks.lora"

[optimizer]
optimizer_type = "AdamW"
learning_rate = 1e-4
lr_scheduler = "cosine_with_restarts"
lr_scheduler_num_cycles = 100
network_dim = 16 #この値を変化させる (2,4,8,16,32,64,128,256)
network_alpha = 1
network_args = ["conv_dim=8"]

[training]
save_every_n_epochs = 10
# max_train_steps = 100
max_train_epochs = 1000
output_dir = "/data/asuken/output/"
output_name = "asuken"

[memory]
# trueにすると削減
gradient_checkpointing = true
# falseにすると削減
persistent_data_loader_workers = false

[sample]
sample_every_n_epochs = 10
sample_sampler = "k_euler_a"
sample_prompts = "/data/asuken/sample_prompt.txt"

database.tomlは以下

[[datasets]]
resolution = 1024
batch_size = 1
bucket_no_upscale = true
enable_bucket = true
caption_extension = '.txt'
keep_tokens = 1

[[datasets.subsets]]
image_dir = '/data/asuken/train/'
num_repeats = 4
color_aug    = true
flip_aug = true
random_crop = true
shuffle_caption = true

結果

とりあえず料理させてみる

picture 3

おおー

秘書っぽい感じで

picture 2

で、チアガール

picture 4

picture 6

満足の出来にはなったので、あすけん頑張ります

apt updateするとGLib-Errorエラーになる問題

環境

症状

apt updateしようとすると「Sub-process returned an error code」エラーになってしまう

# apt update
ヒット:2 http://security.ubuntu.com/ubuntu bionic-security InRelease
ヒット:3 http://jp.archive.ubuntu.com/ubuntu bionic InRelease
ヒット:4 http://jp.archive.ubuntu.com/ubuntu bionic-updates InRelease
ヒット:5 http://jp.archive.ubuntu.com/ubuntu bionic-backports InRelease

(appstreamcli:13840): GLib-CRITICAL **: 19:06:54.994: g_variant_builder_end: assertion '!GVSB(builder)->uniform_item_types || GVSB(builder)->prev_item_type != NULL || g_variant_type_is_definite (GVSB(builder)->type)' failed

(appstreamcli:13840): GLib-CRITICAL **: 19:06:54.994: g_variant_new_variant: assertion 'value != NULL' failed

(appstreamcli:13840): GLib-ERROR **: 19:06:54.994: g_variant_new_parsed: 11-13:invalid GVariant format string
Trace/breakpoint trap (core dumped)
パッケージリストを読み込んでいます... 完了
E: Problem executing scripts APT::Update::Post-Invoke-Success 'if /usr/bin/test -w /var/cache/app-info -a -e /usr/bin/appstreamcli; then appstreamcli refresh-cache > /dev/null; fi'
E: Sub-process returned an error code

対応

libappstream4パッケージを最新にすると直った

apt-get install --reinstall libappstream4

経緯は

  • ユーザーがapt-get updateを実行すると、appstreamがクラッシュする問題が発生
  • この問題は、appstreamのバージョン0.12.2-1で報告される
  • エラーは、appstreamcli refresh-cacheの実行時にGLib-CRITICALのアサーションが失敗することによって引き起こされる
  • 問題は重要度「important」として分類され、aptパッケージに影響を与える
  • バグはMatthias Klumppによって修正され、バージョン0.12.2-2で修正された

参考リンク

MermaidでER図を書くテンプレート

MermaidでER図を書くテンプレート

erDiagram

  T1 ||--|{ T2: "1 対 多(1以上)"
  T1 ||--o{ T3: "1 対 多(0以上)"
  T1 ||--|| T4: "1 対 1"
  T1 ||--o| T5: "1 対 0か1"
  
  T1 {
    id BIGINT PK "ID"
    title VARCHAR(255) "タイトル"
  }

picture 0

公式サイトが1番わかりやすいっていうね https://mermaid.js.org/syntax/entityRelationshipDiagram.html#attribute-keys-and-comments

Dockerでapt-update含むビルドエラーになってしまった謎

環境

  • Docker 26.0.0

症状

Dockerでビルドに失敗する。よく見ると apt update に失敗する。そんなことある?????

Reading package lists...
E: Problem executing scripts APT::Update::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
E: Sub-process returned an error code

調べたらそんなことあった

確認方法

以下実行するとエラー

$ docker run --rm debian:bookworm apt-get update
Unable to find image 'debian:bookworm' locally
bookworm: Pulling from library/debian
71215d55680c: Pull complete
Digest: sha256:e97ee92bf1e11a2de654e9f3da827d8dce32b54e0490ac83bfc65c8706568116
Status: Downloaded newer image for debian:bookworm
Get:1 http://deb.debian.org/debian bookworm InRelease [151 kB]
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8786 kB]
Get:5 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [12.7 kB]
Get:6 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [147 kB]
Fetched 9201 kB in 2s (5312 kB/s)
Reading package lists...
E: Problem executing scripts APT::Update::Post-Invoke 'rm -f /var/cache/apt/archives/*.deb /var/cache/apt/archives/partial/*.deb /var/cache/apt/*.bin || true'
E: Sub-process returned an error code

--security-opt seccomp=unconfined つけると成功する

$ docker run --rm --security-opt seccomp=unconfined debian:bookworm apt-get update
Get:1 http://deb.debian.org/debian bookworm InRelease [151 kB]
Get:2 http://deb.debian.org/debian bookworm-updates InRelease [55.4 kB]
Get:3 http://deb.debian.org/debian-security bookworm-security InRelease [48.0 kB]
Get:4 http://deb.debian.org/debian bookworm/main amd64 Packages [8786 kB]
Get:5 http://deb.debian.org/debian bookworm-updates/main amd64 Packages [12.7 kB]
Get:6 http://deb.debian.org/debian-security bookworm-security/main amd64 Packages [147 kB]
Fetched 9201 kB in 1s (6239 kB/s)
Reading package lists...

原因

この問題の原因は、Dockerのセキュリティ機能であるseccomp(Secure Computing Mode)のデフォルトポリシーに関連している。

seccompは、コンテナ内のプロセスが実行できるシステムコールを制限することで、セキュリティを強化する機能である。この機能により、悪意のあるプログラムがホストシステムに影響を与えるリスクを軽減する。

エラーメッセージにあるE: Problem executing scripts...は、apt-get updateの実行後に設定されたPost-Invokeスクリプトが正常に実行できないことを示している。

このスクリプトは、APTキャッシュをクリーンアップするためにrmコマンドを使用しているが、seccompのデフォルトポリシーによってこの操作が制限されている可能性がある。

--security-opt seccomp=unconfinedオプションを付けてDockerコンテナを実行すると成功する理由は、このオプションがseccompセキュリティポリシーを無効にし、コンテナ内のプロセスが実行できるシステムコールに制限を設けなくなるためである。その結果、apt-get updateの実行中にPost-Invokeスクリプトが正常に実行され、エラーが発生しなくなる。

対象のサーバーがseccomp有効かチェックするコマンドは以下

$ docker system info --format '{{json .SecurityOptions}}'
["name=apparmor","name=seccomp,profile=default"]

対策

  • ホスト側の「libseccomp2」パッケージを最新にする
  • docker runの場合は「--security-opt seccomp=unconfined」でseccomp回避可能(セキュリティ的に脆弱になる
    • docker buildには使えない
  • Dockerイメージをbookwormからbullseyeベースに戻す
    • 応急処置としてはアリ

参考リンク