Dify で Mac 専用 MLX 版 Qwen2-VL を使う (たぶん、LM Studio のバグ技)

前回 Pixtral (Mistral 社のビジョンモデル) の日本語コミュニケーション能力と画像認識の性能の高さに感動しつつも、画像の中の日本語は読めないことを知り傷心したボク。Ollama のバージョンアップで正式に利用できるようになった Meta 社の画像認識モデルである Llama3.2 Vision 11B こそが本命であるはずだ!と早速試したんですが、あまりのぱっとしなさに記事にすることもありませんでした。ローカルで「使える」オープンモデル・ウェイトのビジョンモデルの登場はまだ先なのか、または画像内の日本語が認識できる LLM なんて 32GB RAM の Mac には一生やってこないのか、っていうか OCR したいなら普通に macOS 標準のプレビューでいいじゃんか、ということなのか。なんて思っていたら、普通にありました。とっくに出てました。しかもボクが最近何かとメインで使っている Alibaba 社の Qwen ファミリーに。そう、Qwen2-VL です。

パラメータ数は 2B、7B、72B
はい、日本語正式サポートしてるぅ (上のサイトを Safari で日本語に翻訳してもらった一部のキャプチャ)
画像内の日本語認識が不要なら、Pixtral がオススメ

簡単に使うなら、やはり LM Studio 単体で

LM Studio の虫眼鏡アイコンで “qwen2-vl” と打ち込み、横のチェックボックスで MLX を選べば mlx-community にて変換された MLX 版の Qwen2-VL がずらずら出てきます。一番大きい 7B-Instruct-bf16 でも 16.60 GB なので、32GB RAM の Mac でも問題無く動きそうですが、そこはビジョンモデル、テキストオンリーのモデルと違ってメモリを喰います。BF16 はたまに CPU を使ったり頻繁にハルシネーションをおこしたりするヤンチャ坊主なので、オススメは 7B-Instruct-8bit です。というわけで、LM Studio で動けばそれでヨシ、という方はこれ以降読まなくて大丈夫です。ステキなビジョンモデルライフをエンジョイください。

bf16 のスクリーンショットですが、オススメは Qwen2-VL-7B-Instruct-8bit

Ollama では動かない

さて、普段はローカル LLM のモデルプロバイダとして使っている Ollama をなぜ使わないのかということを説明します。Ollama はバックエンドに llama.cpp を使っていますが、llama.cpp は (今のところ) ビジョンモデルに対応していません。Llama3.2 Vision は、Ollama の開発者が llama.cpp に依存せずに 頑張ってどうにか動くようにした (?) らしいです。が、Llama3.2 Vision 11B のパフォーマンスが 32GB RAM の M2 Max ではイマイチでして、ボクはすぐに使うのやめちゃいました。英語だけで OK の方は良いのかもしれないですね。

Safetensor は MPS で動かすこともできる

↓の Zenn に投稿された金のニワトリさんの記事に、MPS でサンプルコードを動かす方法が紹介されています。Llama3.2 Vision にガッカリしていたときに試したので、えらく感動しました。Mac の GPU で素のビジョンモデル Qwen2-VL が動いていたので。

https://zenn.dev/robustonian/articles/qwen2_vl_mac

さて、API で利用するにはどうするか?

macOS で Qwen2-VL を動かすには、元の Safetensor 版か、MXL 版のどちらか、ということがわかったわけですが、やっぱり Dify から使いたくなってしまいます (よね?)。本家の GitHub にあるワンライナーの API サーバ起動方法は vllm という Python のライブラリを使用しており、残念ながら Mac 未対応です。他の方法を探ると、言語モデルの MLX 用なら割といろんな API サーバライブラリがあるのですが、ビジョンモデルに対応したものとなるとかなり絞られました。さらにそこから実際に Qwen2-VL を使おうとすると、そもそも Dify に登録できなかったり、無理矢理登録できても例外しか発生しないという悲しい状況が 2週間ほど続きました。

同じように MLX のビジョンモデルである Pixtral は LM Studio が API サーバとなり Dify から使えるのに、Qwen2-VL を OpenAI コンパチモデルとして登録しようとすると、最初の ping (モデルが本当につながるかどうかのテスト) に画像が含まれないために Qwen2-VL がエラーを返してきて登録ができません。あらゆる方法を自分なりにいろいろと試しては失敗し、を繰り返していたある日、突然でたらめな組み合わせで動き始めました。詳細は以下に続きます。

成功した構成とバージョン

LM Studio または Dify の新しいバージョンではバグが潰されてこの方法が使えなくなるか、はたまた正式にサポートされて普通に動くようになるかわかりませんが、とりあえず ↓ の構成&バージョンで動作が確認できています。

  • Dify: 0.11.2 (0.11.1 でも動いた実績あり)
  • LM Studio: 0.3.5 (Build 2)
  • Pixtral: mlx-community/pixtral-12b-8bit
  • Qwen2-VL-7B: mlx-community/Qwen2-VL-7B-Instruct-8bit (FastMXL でダウンロードしたモデル)
  • Qwen2-VL-2B: mlx-community/Qwen2-VL-2B-Instruct-4bit (LM Studio でダウンロードしたモデル)
  • macOS: Sequoia 15.1.1 (上記アプリが動けば、多分何でも大丈夫)

Dify から LM Studio の Qwen2-VL を使う方法

やり方は、ほぼ前回の記事と同じです。異なっているのは、LM Studio には Qwen2-VL をロードしておくだけです。Dify のアプリで使うモデルは mlx-community/pixtral-12b-4bit のままで構いません。というか、上記バージョンでは Dify に LM Studio 上の Qwen2-VL を登録できないので、Dify は Pixtral を呼び出しているつもり、LM Studio は読み込み済みの Qwen2-VL を使って推論をする、という状況になります。本来 LM Studio は指定されたモデルを読み込むはずなので、バグだと思いますが、これで動きます。

実行サンプル

いくつか参考となりそうな画像を貼っておきます。

テキストの日本語が怪しいことは多いです
提灯の文字を読んで「雷門」と回答したわけでは無いらしい。っていうか「唐傘 (提灯)」って
文字だけなら手書きの日本語を読めます
結構がんばってる。Markdown の罠でインデックス番号が各行に振られているところと、写真一番下のテキストが斜めになってしまっているところは読めていないのが残念。ラウンドを繰り返すか、プロンプトを工夫すれば精度はあがるかも

感想

性能的には、画像認識の精度や知識は Llama3.2 Vision モデルよりは良いけど、Pixtral ほどじゃ無いです。日本語 OCR メインの用途なら macOS のクイックルックやプレビューの方が相当優れています。というわけでやはり、期待したほどでは無いな、というのが正直な感想です。大量の RAM を積んでいる方が 72B のモデルを動かすと、また違う感想になるかもしれません。ビジョンモデルの使いどころも定まっていないボクにとっては、「普通には動かせないものを動かす」というハッカー的欲求を満たせたのでとりあえず満足、という感じですかね。

ところで最近のローカル LLM はほとんど Qwen2.5 シリーズしか使ってません。日本語チャットは qwen2.5:14b-instruct-q8_0 (15GB) もしくは qwen2.5:32b-instruct-q4_K_M (19GB)、コーディングは qwen2.5-coder:14b-instruct-q8_0 (15GB) もしくは qwen2.5-coder:32b-instruct-q4_K_M (19GB) です。速度や大きなコンテキスト長を扱いたいとき (注) は 15GB サイズのモデル、精度が欲しいときは 19GB のモデルを使っています。欧米のモデルよりも日本語が得意というのもありますが、各種リーダーボード (日本語オープン、日本語総合コーディング) でも Qwen シリーズは高評価ですので、未体験の方はゼヒ。

ついでにですが、最近リリースされた推論 (reasoning) 重視モデルの QwQ-31B-Preview も普通に Ollama でダウンロードして使えます。32GB RAM の M2 Max での生成速度は速くない (7.5 TPS 程) ですが、性能というか、考え方の方向性がこれまでとかなり違い、ヤバいです。次元が違う感じ。

(注: 大きなサイズのモデルだとコンテキスト長を小さくしないと遅くなります。詳しくはこちらの記事をご覧ください:)

最後に、ビジョンモデルの活用法を一つ思いつきました。大量の素材用写真が無造作にフォルダに入っているみたいな状況があれば、それぞれの写真の特徴を macOS の「情報を見る」のコメント欄に書き込んでくれるスクリプトなんてよさそうですね。Spotlight で検索できるようになるし。Qwen2-VL はビデオの読み込みもできるらしいので、整理に困っている大量の画像・映像を持っている人は良いかもですね。

Image by Stable Diffusion (Mochi Diffusion)

Pixtral の記事のトップ絵に対抗した内容で、登場人物を alibaba にし、場所を Alibaba Cloud 社があるらしい中国の Yu Hang にしてみました。きっと本当はこんな町並みでは無いのでしょうが、ボクの想像と概ね近いものを選びました。

Date:
2024年11月27日 23:59:11

Model:
realisticVision-v51VAE_original_768x512_cn

Size:
768 x 512

Include in Image:
masterpiece, intricate, realistic, sharp focus, photograph, alibaba walking in Yu Hang, china

Exclude from Image:

Seed:
1426778725

Steps:
20

Guidance Scale:
20.0

Scheduler:
DPM-Solver++

ML Compute Unit:
CPU & GPU

マウスホイールが一瞬だけ逆にスクロールする問題を解決

この記事は、主に Mac ユーザに向けての記事になります。マウスは数千円程度の、特に特徴の無い、平均的もしくはお安いもの (4千円以下?) が対象になるかと思います。ボクが解決できたのは USB ドングルタイプです。

注意: 「Mac でマウスのホイールの回転方向とスクロールの方向を逆にする方法の説明」ではありません。その設定方法は簡単に見つかります

この記事で説明するのは、使っていると一瞬だけ上下逆に動いちゃう、という問題の解決方法です。特に、一度スクロールを止めて少ししてからもう一度同じ方向にスクロールしようとすると、一瞬逆に動いて読んでいたところを見失う、というような問題への解決方法です。この方法で解決しなければ、世の中に 100万ページくらいある他のサイトで紹介されている方法をお試しください。

解決方法

システム環境設定のマウスで、スクロールの速さを 2つくらい下げましょう。どれくらいが最適かは試しながら調整してください。これで上に書いた不具合は解決します。多分、3つ 4つ下げても体感的にスクロールの遅さを感じないと思います。なのに、きっと問題は解決します。

真ん中あたりで試しましょう。たいていの人はスピードの差を感じないです

なぜ解決するか 〜多分こうなんじゃないかな〜

「ホイールの汚れを数ヶ月おきに掃除しましょう」なんて話を真に受けてマウスを分解したことがある人ならわかると思いますが、大抵のマウスのホイールの内側には細い溝がたくさん開いていて、片側から光もしくはレーザーが出され、反対側のセンサーでで受けています。ここでホイールの回転を読んでいるわけですね。お安いマウスだと、Mac 側が感度を高めた (スクロールを速くした) 時の読み込み速度に追いつかなくて、結果逆回転と判定されちゃうんじゃ無いかと思います。Mac が落ち着いてホイールの動作を読み取るようにしてあげることで、常に正しい結果が得られる、ということなんじゃないかなと思ってます。知らんけど。

試した結果とか、使っているマウスとか

ボクの場合、一つのマウスを仕事用の Windows と Mac で使っていますが、Windows では全く発生したことが無かったことから、汚れ、ハードウェアの不具合、電池の消耗等は除外していました。ふと昔から Mac はマウスの解像度が高かったということを思いだし、ホイールのスクロールの速度を下げたことが功を奏しました。スクリーンショットの位置に変更した後、タイトルの不具合は一度も発生していません。もちろん Google 先生にも相談しましたが、役立つ情報はありませんでした。

ちなみに使っているマウスは、logi の M220 (レーザー、静音タイプ、USB ドングル付き) です。ホイールのほどよい固さとクリックのしやさも気に入っているので、こんなことで解決できてよかったです。なので、皆さんへハッピーのお裾分けです。せっかくなのでお小遣い稼ぎに Amazon のリンクを貼っておきます。

Image by Stable Diffusion

マウスのヒーローがマッドサイエンティストをやっつけるイメージを作ろうとしたら、ヤバい感じの画像ばかりができてきました。最終的には、ここまでひどい完成度なら誰からも怒られないだろう、という画像を採用です。某万博マスコットキャラクターの採用理由と近いですかね。知らんけど。

Date:
2024年10月18日 0:29:23

Model:
realisticVision-v51VAE_original_768x512_cn

Size:
768 x 512

Include in Image:
comicbook cover, the super hero mouse-man versus a mad doctor

Exclude from Image:

Seed:
2438098213

Steps:
25

Guidance Scale:
20.0

Scheduler:
DPM-Solver++

ML Compute Unit:
CPU & GPU

Ollama 単体では速い LLM が、なぜか Dify や Continue から使うと遅い、という時の解決方法

最近のオープンソース・オープンウェイトの LLM のパフォーマンスは本当にすごくて、コーディング補助なら DeepSeek Coder V2 Lite Instruct (16B)、日本語と英語のチャットや翻訳なら Llama 3.1 Instruct (8B) で十分です。Ollama をターミナルアプリから実行してチャットすると、その内容と回答スピードには本当に驚かされますね。インターネットが止まっても当分生きていける感じがします。

ところが、Dify や Visual Studio Code 用 LLM 拡張機能 Continue から Ollama の同じモデルを API で使用すると、使い物にならないくらい遅いという状況が発生しました。今回はその解決方法を紹介します。あなたの問題の原因は別のところにあるかもしれませんが、簡単に確認・修正できるので、まずは本記事の【結論】の内容を試してみることをオススメします。

確認できた環境

OS やアプリのバージョン

macOS: 14.5
Ollama: 0.3.8
Dify: 0.6.15
Visual Studio Code - Insiders: 1.93.0-insider
Continue: 0.8.47

LLM とサイズ

モデル名モデルサイズコンテキストサイズOllama ダウンロードコマンド
llama3.1:8b-instruct-fp1616 GB131072ollama pull llama3.1:8b-instruct-fp16
deepseek-coder-v2:16b-lite-instruct-q8_016 GB163840ollama run deepseek-coder-v2:16b-lite-instruct-q8_0
deepseek-coder-v2:16b-lite-instruct-q6_K14 GB163840ollama pull deepseek-coder-v2:16b-lite-instruct-q6_K
mac で 32GB 以上の RAM なら楽勝で動くはずのモデルサイズ

【結論】コンテキストサイズを見直そう

API 経由で Ollama のモデルを利用する側のアプリ、例えば Dify で設定する「Size of context window」を十分に小さくすることで解決します。モデル自体が対応しているから、とか、将来のためになるべく多くのトークンを処理できるキャパにしておきたいから、という理由で大きな数字を割り振るのはやめましょう。デフォルト値 (2048) または 4096 程度に変更し、短い文章のチャットでテストしてみてください。本来のスピードに近いパフォーマンスが出れば、ビンゴです。

コンテキストサイズとは: 英語では context size、他にコンテキストウィンドウ (context window)、コンテキスト長 (context length)、とも呼ばれる値で、LLM が一度のやりとりで処理できるトークン数の合計です。トークン数とは、日本語ならほぼ文字数、英語ならほぼ単語数とイコールです。上の表の Llama 3.1 を見ると 131072 となっていますので、単純に LLM への入力と生成されるテキストが同じ量であると想定すると入力に使えるのは半分なので、Llama 3.1 は約 6万5千文字の日本語の文章を入力に使用できる、そのキャパシティがあるということです。

コンテキストサイズを変更するところ

Dify

スタジオのアプリ内にある LLM ブロックを開き、モデル名をクリックすると細かい設定が行えます。下にスクロールすると Size of cont… (Size of content window) があるので、そこのチェックを外すか、「4096」を入力します。

無効化したときのデフォルト値は 2048

Continue (VS Code 用拡張機能)

コンフィグファイル config.json の LLM の設定内、contextLengthmaxTokens それぞれを 40962048 に変更します (maxTokensは LLMで生成されるトークンの最大値なので、半分にしています)。コンフィグファイルは Continue ペインのギアアイコンから開けます。

    {
      "title": "Chat: llama3.1:8b-instruct-fp16",
      "provider": "ollama",
      "model": "llama3.1:8b-instruct-fp16",
      "apiBase": "http://localhost:11434",
      "contextLength": 4096,
      "completionOptions": {
        "temperature": 0.5,
        "top_p": "0.5",
        "top_k": "40",
        "maxTokens": 2048,
        "keepAlive": 3600
      }
    }

LLM のコンテキストサイズを調べる

一番簡単なのは、Ollama のコマンドollama show <modelname>を使う方法です。context length として表示されます。実行例:

% ollama show llama3.1:8b-instruct-fp16
  Model                                          
  	arch            	llama 	                         
  	parameters      	8.0B  	                         
  	quantization    	F16   	                         
  	context length  	131072	                         
  	embedding length	4096  	                         
  	                                               
  Parameters                                     
  	stop	"<|start_header_id|>"	                      
  	stop	"<|end_header_id|>"  	                      
  	stop	"<|eot_id|>"         	                      
  	                                               
  License                                        
  	LLAMA 3.1 COMMUNITY LICENSE AGREEMENT        	  
  	Llama 3.1 Version Release Date: July 23, 2024

アプリケーションにモデルを追加する時のコンテキストサイズ指定

Dify のモデルプロバイダー Ollama

Dify に Ollama の LLM を追加する際、デフォルトで 4096 になっているところを上書きすることで、モデルのキャパシティ (Model context size) と生成されるトークンの上限 (Uper bound for max tokens) を設定できます。ただ上限をここでかけてしまうと作った AI アプリ側で不具合が出たときにデバッグしづらいので、追加の際にはどちらもモデルのコンテキストサイズ (context length の値) を入れておくのが良いと思います。そして、AI アプリ側の Size of content window で後述するほどよいコンテキストサイズを指定しましょう。

Continue の “models”

Continue の場合、設定内容はモデルを選択したときに使われるので、titleにコンテキストサイズに関する説明 (Fastest Max Size とか 4096 とか) を入れて、同じモデルで複数の異なったコンテキストサイズの設定を用意しておいても良いかもしれません。以下は、ボクが実際に 32GB RAM の M2 Max で試して Llama 3.1 (8B) の高速動作が確認できた値を入れてあります。Dify とは異なり、maxTokenscontextLengthと同じ値だとエラーになるため、半分にします。

    {
      "title": "Chat: llama3.1:8b-instruct-fp16 (Fastest Max Size)",
      "provider": "ollama",
      "model": "llama3.1:8b-instruct-fp16",
      "apiBase": "http://localhost:11434",
      "contextLength": 24576,
      "completionOptions": {
        "temperature": 0.5,
        "top_p": "0.5",
        "top_k": "40",
        "maxTokens": 12288,
        "keepAlive": 3600
      }
    }

LLM の処理が重いとき、何が起こっているか (状況からの想定)

ollama runで使用すると速いのに他のアプリから Ollama サーバ経由で使用すると重いのは、上記の通りコンテキストサイズが大きいことが原因のひとつです。実際に LLM が動作しているときに、ollama psコマンドを叩いてみましょう。以下は実行例ですが、上がモデルのコンテキストサイズ最大値を設定して反応が重い時、下がサイズを小さくして反応が速い時の出力です。SIZEPROCESSORの下に書かれている内容に注目してください。

% ollama ps
NAME                     	ID          	SIZE 	PROCESSOR      	UNTIL               
llama3.1:8b-instruct-fp16	a8f4d8643bb2	49 GB	54%/46% CPU/GPU	59 minutes from now	

% ollama ps
NAME                     	ID          	SIZE 	PROCESSOR	UNTIL              
llama3.1:8b-instruct-fp16	a8f4d8643bb2	17 GB	100% GPU 	4 minutes from now

重い時のSIZEは実モデルのサイズ (16 GB) よりもかなり大きい 49 GB となり、処理は CPU で 54%、GPU で 46% 行っています。ウラを取っていませんが、Ollama は実際に処理しているトークン数にかかわらず API で大きなコンテキストサイズを受け取ると、LLM のサイズ自体を大きく処理するようです。そのため、GPU の VRAM サイズを超えたモデルを動かしていると認識されるので (ユニファイドメモリの Mac ではほぼ意味がないですが) CPU とその配下の RAM も動員し、場合によってスワップも使用して処理するのでとてつもなく遅くなる、のであろうと考えています。そういう仕様なのだろうと。

ほどよいコンテキストサイズの値を見つける

さて、状況証拠からおおよその理由がわかったので、対策を取ります。4096トークンでまかなえるのであればそれで構いませんが、可能な限り大きなトークンを処理したいですよね。Ollama の仕様を見つけられれば良かったのですが諦め、手作業コンテキストサイズを 4096 の倍数で増減させながらチャットを繰り返し、PROCESSOR 100% GPUになる値を見つけ出しました。それが、24576 (4096*6) です。Llama 3.1 8B の F16 と DeepSeek-Corder-V2-Lite-Instruct の Q6_K なら 100% GPU で動きます。32 GB 以外のユニファイドメモリの方は、同様の方法で見つけ出してください。使った感じ、CPU 10%、GPU 90% くらいでも十分な速度が得られましたが、4096 の倍数以外の数字を使うと文字化けが発生したので、そこはご注意ください (DeepSeek-Corder-V2-Lite-Instruct の Q8_0 が該当)。また、Dify で同じコンテキストサイズを使った場合、Continue よりもSIZEが小さくなります。欲張ればもう少し増やせるかもしれませんので、必要に応じて試す価値はありそうです。時間はかかっても良いので長文を処理したい、原文を分割したくない、なんてケースでは、LLM の持つキャパを最大限使うという選択肢もアリだと思います。

Ollama、疑ってごめんね (読まなくて良い話)

Ollama 自体で動かしたら速いのに、API 経由で使うととてつもなく遅くなるんだから、Ollama のバグに違いない!サーバの処理がおかしいんだ!と決めつけて調べていたのですが、Windows 版で GPU を使ってくれないという Issue のやりとりにあった「context size を 4096 にして試したまえ」というアドバイスにハッとし、実際に試してみるとウソのように解決しました。Ollama さん、盛大に疑ってごめんなさい。

一番大きいモデルサイズは DeepSeek-Corder-V2236BLlama 3.1 にもなると 405B と完全なる貴族仕様で、利用可能なコンテキストサイズはそのまま小さな庶民サイズのモデルにも適用されています。もしかしたら将来的に Ollama サーバでは違う処理がされるのかもしれませんが、 少なくとも 2024年の晩夏現在、一般庶民 (レベルの RAM 容量) で快適に LLM を使うには、コンテキストサイズを自分で調整する必要がある、ということを学びました。

Image by Stable Diffusion (Mochi Diffusion)

小さなバイクが、ゴージャスなバンだかキャンピングカーだかピックアップトラックだかを抜き去る画像が欲しかったんですけど、バイク vs バイクだったり、逆車線で単純にすれ違っただけだったり、バンが見切れてたり、ただただバイクがかっこよく走ってるだけだったり、と非常に苦戦!疾走感が無いですが、小さい方が速い感を出せてるこれにキメタ!

Date:
2024年9月1日 2:57:00

Model:
realisticVision-v51VAE_original_768x512_cn

Size:
768 x 512

Include in Image:
A high-speed motorcycle overtaking a luxurious van

Exclude from Image:

Seed:
2448773039

Steps:
20

Guidance Scale:
20.0

Scheduler:
DPM-Solver++

ML Compute Unit:
All

Oracle Cloud の MFA リセット方法

しばらくぶりに OCI (Oracle Cloud Infrastructure) にログインしようとしたところ、MFA のパスコードで入れない。何度か試すとアカウントがロックされる。パスワードの再設定とアカウントのロック解除はできるが、MFA のコードだけはトップ画像の通り「無効なパスコード」といって受け付けてくれない。という状況に陥り、サポートの方々のご協力で無事 MFA のリセットができました。公式・非公式ともにあまり役立つ情報がみつからなかったので、まとめておきます。スマホの機種変更をした、バイパスコードは手元にない、他にアドミンユーザはいない、というときに必要な手順になります。ちなみにボクは Free Tier の利用ですので、有償サービスを契約していなくても使えます。

必要なもの

手元に準備しておいてください。

  • ウェブブラウザのウィンドウかタブ 2枚 (チャット用とログインテスト用)
  • 何らかの Authenticator アプリをインストールしたスマホ (ボクは Microsoft Authenticator)
  • Tenancy name (= クラウド・アカウント名)
  • Email address (登録に使用したメールアドレス)
  • Phone number (登録に使用した電話番号)
  • Last 4 digits of credit card (登録に使用したクレジットカードの下 4桁)
  • Expiery date (登録に使用したクレジットカードの有効期限 (月/年))
  • 多少の英語力
  • (サポート ID (CSI番号) は不要でした)

製品別サポート窓口

一応。金曜日の 21:30 頃フリーダイヤルへかけたら、日本人の方が対応くださいました。が、解決できなかったので、今回のケースではすっ飛ばしてかまわないでしょう。

https://www.oracle.com/jp/support/support-services-list

まず自力で試してみること

ボクのケースでは解決に至りませんでしたが、ChatBot で紹介されたのでまずはこちらを試してみても良いかもしれません。でもこれができたら結構脆弱な感じがしちゃうけどどうなんでしょう。

1) 以下 URL にアクセス

https://www.oracle.com/jp/cloud/sign-in.html

2) クラウド・アカウント名を入力して次に進む

3) ユーザ名 (メールアドレス) とパスワードを入力するページの URL を以下例のように編集して開く (太字部分を書き換え)

元の URL 例:

https://idcs-1234abcd5678efgh1234abcd5678efgh.identity.oraclecloud.com/ui/v1/signin

変更後例:

https://idcs-1234abcd5678efgh1234abcd5678efgh.identity.oraclecloud.com/ui/v1/myconsole?root=my-info&my-info=my_profile_security

4) うまくいくと、バイパスコードを表示できたりするらしいので、それを使用して MFA をパスする

【解決方法】チャットでサポートに MFA のリセットをお願いする

解決方法です。英語でサポートの方と直接チャットをして MFA をリセットしてもらいます。

1) 以下 URL へアクセス

https://www.oracle.com/cloud

2) 右下の Talk to sales をクリックして Chat now をクリック

3) Oracle Chatbot が開くので、Get Support → Cloud Infrastructure (OCI) including Free Trial をクリック

4) 下の方の Cloud Support Chat をクリック

5) Live Chat が開くので、国選択、メアド入力、最初の問い合わせ内容を選び、privacy term にチェックを入れたら Start chat をクリック

6) おそらく順番待ちのキューに入るので、担当の方が現れたら MFA のリセットをお願いしましょう。「please reset my MFA. I just replaced my mobile.」とでも書いて、後は要求に応える形で上に書いた「必要なもの」をつど提供します

7) MFA のリセットが行われたら、チャットを終了する前に Authenticator アプリに登録し、ログインできるか試しましょう。目の細かい 2D コードは Oracle Authenticator アプリ以外では多分使えないので、下にあるチェックボックス「オフライン・モードまたは別のオーセンティケータ」で他のアプリ用の QR コードを表示し、アプリから読み込んで登録します

OCI ログインURL: https://www.oracle.com/jp/cloud/sign-in.html

8) 無事 Authenticator が登録でき、MFA でログインできたらチャットにお礼を書き、アンケートに答えましょう

【重要・追加作業】バイパスコードの取得

今回のような不測の状況を避けるには、バイパスコードの取得が必要です。以下、その手順となります。バイパスコードは機種変したとき等に MFA のパスコードの代わりに入力するものです。一度使用すると使えなくなりますので、使った後は同じ手順で作り直して安全な方法で保管しておきましょう。

1) ログイン後、右上のアイコンから My profile をクリック

2) 自分の名前の下にある Security をクリック

3) Bypass codes の枠の中の Generate をクリックして生成し、コピーする (下の例はすでに 1つ生成した状態)。生成時にコピーを忘れた場合は、目のアイコンクリックで再表示できます

バイパスコードでログインする方法

パスワードを入れた後、パスコードを入力する画面で一番下の「かわりのログイン方法を表示」をクリックすると、バイパス・コードボタンが表示されます。そちらをクリックすると表示される「2ステップ検証」でバイパスコードの入力ができます。

おまけ (怖い話)

今回のトップ画像は、MFA のリセット後、無事 Authenticator アプリでログインできる状態になってから撮ったスクリーンショットになります。画像を加工しているときに気がついたのですが、おかしな部分があったので矢印を付けました。ボク以外の人にはわからないんですけど、今回 MFA の設定は 2回目なのに、Phone のサフィックスが -3 になっています。MFA が失敗していたとき、そこは Phone-1 でした。つまり、ボクの知らないスマホで MFA の登録が行われていた。。。?

この記事をここまで読んだあなた、Phone のサフィックスは正しいですか?

(解決済み) macOS 「書類」以下のフォルダが Finder の移動メニューやターミナル.app から直接開けなかった

いつからかわからないんですが、mac の書類フォルダ (~/Documents) 以下のフォルダが Finder で直接開けなくなってしまっていました。原因はわからずじまいなのですが、解決できたので共有します。

きっかけ

現在の macOS のバージョンは Sonoma 14.2.1 です。実は以前から、ひょっとしたら Big Sur 11.0 あたりからターミナルで open ~/Documents/Python/hoge とかやってもウィンドウが開かないなと気になってはいたのですが、そんなに実害も無いしまあいいか、と放置していました。ところが今日、GitHub Desktop をいじっていた時に症状が現れました。同アプリで Show in Finder ボタンをクリックすると、本来開くべき書類フォルダ数階層下のフォルダでは無く、かわりに自分のホームフォルダがヘンな感じで開いたのです。これはやっぱりおかしい、解決しておかないと面倒なことになりそうだぞ、と言うことで調べ始めました。

↑これクリックで↓これが現れた (自分のホームディレクトリ)
本来は書類フォルダのもっと下の方にあるフォルダが開いてくれないとおかしい

症状

ターミナルアプリで ~/Documents フォルダ以下の様々なフォルダを open コマンドで開いても、同じく自分のホームしか開いてくれません。開いた Finder のウィンドウで書類フォルダをクリックすれば、内部のフォルダは全て開けます。ミュージック (~/Music) やダウンロード (~/Downloads) などの内部にあるフォルダも同様の手順でターミナルから開けます。書類フォルダの中にあるフォルダだけ、直接 Finder で開けないのです。Finder の「移動」メニューから「最近使ったフォルダ」で書類フォルダ以下のフォルダを指定したときも同じ動作です。右クリックから「新規タブで開く」を選んでも同じ。とにかく Finder が、書類フォルダ自体とその配下のフォルダを直接開くことができず、仕方なくホームフォルダを開いている感じでした。

どうやって解決したか

いろいろ試しましたが、最終的には Finder の表示方法をリストに変更することで解決したようです (元々は、カラム表示がダメだった雰囲気)。手順をもう少し細かく書くと、まず書類フォルダを開き、ウィンドウ上部にある表示からリストを選びます。

↑か↓

その後、アクションメニューから「表示オプションを表示」します。

コマンド + J でも OK

開いた小さいウィンドウの「常にリスト表示で開く」にチェックを入れ、一番下の「デフォルトとして使用」をクリックし、閉じます。これで、書類フォルダや配下のフォルダが Finder のリスト表示で開くようになりました。

勝利宣言

Finder は、小さな親切か大きなお世話かわかりませんが、あるウィンドウで表示方法を変更すると、次に新しく開いたウィンドウも表示方法が踏襲されたりします (条件はよくわからず)。なので、不具合を再現してみようと、上記設定をした後に表示方法をカラムにしたりギャラリーにしたり閉じたり開いたりを繰り返していたところ、最終的に不具合はぱったり発生しなくなりました。カラム表示でもサブフォルダが開くんです。よって、原因不明ながら、上記手順で解決、と言ってしまおうと思います。

他に試してダメだったこと (参考まで)

Image by Stable Diffusion

Date:
2024年1月3日 17:56:25

Model:
realisticVision-v20_split-einsum

Size:
512 x 512

Include in Image:
comicbook-style, gray hair guy looking for a missing folder in a book library

Exclude from Image:

Seed:
2520942867

Steps:
20

Guidance Scale:
20.0

Scheduler:
DPM-Solver++

ML Compute Unit:
CPU & Neural Engine

Mac で brew upgrade したら tkinter が見つからなくなったが、解決した話

一年ほど前、Intel Mac で tkinter をいじっていたとき、いくらがんばっても日本語入力の時の選択肢を表示させる方法がうまくいかなかったので、しばらく tkinter 含めた Python の GUI からは離れていました。が、最近読み始めた本で tkinter を使っていたので気分が乗って、改めていろいろ試したところ、ハマった後に解決できたのでその方法のご紹介です。

結論から先に言うと、答えは brew info python に書いてあった

brew で Python を 3.9.1 から 3.9.6 にアップグレードしたときのログはロクに見ていなかったのですが、一晩寝かせた後に brew info python を叩いてみたところ、やるべきことが書いてあり無事解決できました。下の (略) に挟まれた部分です。tkinter はもう Python 3 に含まれ無くなったけど、まだインストールできますよ、という事を言っています。

% brew info python3
python@3.9: stable 3.9.6 (bottled)
Interpreted, interactive, object-oriented programming language
https://www.python.org/
(略)
tkinter is no longer included with this formula, but it is available separately:
  brew install python-tk@3.9
(略)

というわけで、もし brew upgrade で python3 を 3.9.x にアップグレードした後に tkinter が動かなくなった場合は、brew install python-tk@3.9 で tkinter も別途インストールしてあげてください。

ほんの最近まで、多分去年くらい?までの情報では「Python で GUI やるなら、まずは標準で入っている tkinter を試しましょう」と書かれていると思うんですが、少なくとも Mac の brew によるインストールでは標準では入っていない、ということですね。

動かなくなったときのエラーはこんな感じ

% python3 -m tkinter
Traceback (most recent call last):
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 188, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 147, in _get_module_details
return _get_module_details(pkg_main_name, error)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/runpy.py", line 111, in _get_module_details
__import__(pkg_name)
File "/opt/homebrew/Cellar/python@3.9/3.9.6/Frameworks/Python.framework/Versions/3.9/lib/python3.9/tkinter/__init__.py", line 37, in
import _tkinter # If this fails your Python may not be configured for Tk
ModuleNotFoundError: No module named '_tkinter'

動かなくなった当日は、pipenv だとモジュールを読み込んでくれないような気がしていてずいぶんと余計な遠回り。一晩寝かせて Python 環境全体の再構築までを覚悟したものの、pipenv の外でも動かない。やったことをイチから見直して答えにたどり着けてヨカッタです。

Mac mini (M1, 2020) で Dell モニタの USB ポートが使えない、画面が表示されない時のワークアラウンド

Dell モニタに 20cm の USB-C の延長ケーブルを接続

Mac mini (M1, 2020) を購入した

いろんな方がレビューしてるように、パフォーマンスは素晴らしいです。アプリケーションも、Intel CPU 用機能拡張や VPN (具体的には LogMeIn HAMACHI) などシステムの深いところに食い込んだものは動かないケースが多いようですが、それ以外は概ね想定通りで、すごく満足しています。各デベロッパの対応も早く、毎週のようにサポートされるアプリケーションが増えるのを見られるのも楽しいですね。

Dell モニタの画面が映らない、USB ポートが使えない

しかし、メインで使用している Dell のモニタ P2421DC に USB-C で接続しながら同モニタの USB ポートをハブとして使用するにはコツがいることがわかりました。モニタに電源が入っている状態で Mac mini を起動すると、USB ハブにつながったキーボードから入力できないのです。映像は出力されています。Dell Latitude 5310 や XPS では当然全く発生しません。あまり気にしていませんでしたが、そういえば MacBook Air (Retina, 13-inch, 2019) でも USB-C ケーブルを抜き差ししていたことがあるので、Mac 起動時の USB 機器の接続フローと Dell モニタ側のそれがミスマッチしているように思えます。

ともあれ、日本語ではあまり同様の症状や解決策が無いようなので、投稿しておきます。

環境:

不具合の内容:

macOS 起動後、UCB-C ケーブルで接続された メインモニタのポート USB 3.0 x2 (側面)、USB 2.0 x2 (背面) に接続した機器を認識しない。キーボードやマウスからの入力も、iPad 等への給電も行えない。

下記ワークアラウンドを実行し、キーボードやマウスが使えるようになった後も、スクリーンロックしてしばらくした後にログイン使用とすると、キーボードからパスワードの入力はできるが画面がメインモニタに表示されないこともある。

不具合の再現方法:

モニタの電源が入っている (スタンバイ) 状態 で、Mac mini の電源を投入する。macOS 起動途中から画面は表示されるが、USB 機器は使用できない。

対処方法・ワークアラウンド:

Mac の起動前にできること:

Mac の電源を入れる前に、モニタの電源を切っておく。ボクの場合は HDMI 接続のモニタもあるため、そちらでパスワード入力画面が表示されてからメインモニタの電源を入れる。ごめんなさい、テストしているときはこの方法が有効だった (と少なくとも思う) のですが、最近はなぜか全くうまくいきません。以下をお試しください。

Mac の起動後にできること:

モニタとつながっている USB-C ケーブルを抜き差しします。OS が起動してしまった後では、モニタの電源 off/on では接続されません。Mac mini 背面からケーブルを抜き、モニタがスタンバイ状態に戻ったら再接続します。

ボクは少しでも簡単にケーブルの抜き差しができるようにと、USB 3.1 Gen2 規格に対応した延長ケーブルを amazon で購入しました。本投稿トップの画像のように、モニタ側にこのケーブルを挿し、画面に表示されなかったりキーボードが効かないときに矢印の部分を抜き差ししています。スイッチ付きの USB-C ケーブルを探したが信頼できそうな (Thunderbolt として使えそうな) ものが見つかりませんでした。Mac mini 本体のポートへのケーブル抜き差しに抵抗がある、設置場所的に無理という方はこちらをお勧めします。

今後の展望:

Intel チップの MacBook Air (macOS 10.15 Catalina -> 11.1 Big Sur) でも発生しますが、本体のキーボードでログインはできるし、USB-C ケーブルの抜き差しもたいした手間じゃ無い、ということであまり気にしていませんでした。設置場所によっては Mac mini のケーブル抜き差しは面倒なので、当面は Dell のモニタの電源を切る癖を付けるしかなさそう。Dell は2021年初頭までにMacバージョンのDell Display Managerを提供する (引用元) と言っているで、近い将来解決してくれると願いたいです。

© Peddals.com