
從上次寫釋出記事至今,已經隔了好多個版次。細數一下從 1.9.42 版之後有什麼變動:
(閱讀全文…)This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: SSE3 SSE4.1 SSE4.2 AVX AVX2 AVX512F AVX512_VNNI AVX512_BF16 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
使用 pip 直接從 Python Package Index 安裝 TensorFlow,之後 import 時,會冒出上面這則提示。
我目前使用的 CPU 是 AMD Ryzen 5 8500G,雖然內建的 GPU 不在 TensorFlow 支援之列(更嚴謹地說,是不在 AMD ROCm 框架支援之列),但是既然 CPU 有 AVX-512 指令集可用,那聊勝於無、不用白不用。
但是為了要啟用 AVX-512,就得自己編譯 TensorFlow,並指定需要的編譯旗標。
網上不少過時、無效的指引,這篇也不知道何時會過時、無效,純粹做個筆記。
export TMPDIR=$PWD
,不然最後在打包 wheel package 階段,會因為 /tmp 容量不足而失敗 ./configure
回答幾個配置問題,如果前面幾點都有妥當安裝配置好,應該是一路 Enter 使用偵測到的預設值即可bazelisk build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu --copt="-march=native"
讓它建置出「偵測到可用、但預設未啟用」(如原始訊息所示)的那些 CPU 加速指令集的 TensorFlow,這步驟需要一點時間。-march=native
背後做了哪些工,可以跑 bash -c 'echo | clang-17 -E - -march=native -###'
(如果缺乏這樣的好奇心,我覺得也…沒事)pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow_cpu-2.20.0-cp312-cp312-linux_x86_64.whl
之後 import tensorflow as tf
時,理應就不會看到最上面那段訊息了。
從 1.9.50 版開始,樸實注音鍵盤將新酷音函式庫 (libchewing) 原本以 Git submodule 嵌合進專案目錄結構的作法,改成分離為獨立的 Android App Module (AAR) 專案:libchewingAndroidAppModule,再引入此專案建置出的 .aar 模組檔。
初始動機是新酷音函式庫自 v0.8.0 開始,預設採用 Rust 版的程式碼來建置,樸實注音鍵盤這邊不想跟不上這個變革,這不是為做而做,初衷仍是為了 Rust 主打的 memory safety 特性,以及新語言較豐富的表現力。
目前新酷音函式庫仍保持著 C & Rust 雙軌並行相容,所以 libchewingAndroidAppModule 暫時仍是拿 C 語言實作版本來建置,然後嘗試轉換至 Rust 語言實作版本。
我預想這不是一件太容易的事。一來樸實注音鍵盤對於舊設備有「在能力範圍內盡力支援」的方針,所以至今仍至少支援 Android 6..0 (API Level 23);也因此樸實注音鍵盤為了已有些年代的設備,會盡力支援 Android(仍)支援的 4 種硬體平台架構:armeabi-v7a, arm64-v8a, x86, x86_64,而對應的 Rust 當前硬體平台架構支援程度 (tiers) 是略有紛歧的。
就努力看看,行不通的話,變通方法還是很多啦(大概)。
從 iThome〈日本政府終於不再強制使用3.5磁碟片〉看到的消息。
我國小的時候,以為 3.5″ 軟碟是「硬碟」,因為家裡只有 5.25″ 軟碟,相較之下,3.5″ 軟碟至少在外殼這部份「硬」多了,不過還好有長輩(不知是我爸,還是電腦公司的人)當場教育我,我才沒有繼續抱著錯誤認知鬧笑話。
升上國中之後,我很喜歡去逛宜蘭市內各間電腦公司,偶然瞥見店面有販售用壓克力盒包裝的單片 3.5″ 軟碟,沒忍住,買了一片,收在書包裡,如珍寶般帶著上下學。那時我最常看到的 3.5″ 軟碟,是超級任天堂玩家拿來拷貝遊戲的媒體。
印象沒錯的話,之後直到大學畢業時,我都還用著 3.5″ 軟碟,但是那時候,像是 Zip Drive、CD-R 以及抽取式硬碟,已經有逐漸取代 3.5″ 軟碟的趨勢。
在我當兵時,離我從大學畢業也才沒幾個月,USB 隨身碟就已經成為各業務士兵最主流的儲存媒體了。
日本也實在撐得夠久的了。
先前的設計雖然(自認)俐落,但是沒有通過防水測試,連生活防水(防潑)都沒辦法,配戴著洗個手就讓錶芯短路罷工。
檢查了一下原因,用 TPU 材質製造的底殼膠圈尺寸不對,造成滲水;而同樣 TPU 材質的側邊按鈕,也由於精度限制,無法達到與錶殼既「密合」又能「順利按壓」的兩全;壓克力鏡面也因為黏膠沒有塗好,也有空隙的問題。
基於以上的缺失,再次改了這個重建錶殼的設計。除了調整底殼膠圈的幾何,使其更密合;側邊按鈕也老老實實的回歸類似原始設計,減少暴露表面;鑲嵌壓克力鏡面的接觸面,也修改成更能確實上膠。
不過,重組完成後,我暫時還不敢再去苛刻測試成品的防水能耐 😹。
因為公司的軟體業務一直沒有起色,所以打開了預備的錦囊「購入 3D 列印機,經營客製化建模與打件」作為新闢的業務項目。
即使有了 3D 列印機,也不會就像變魔術般自動生出我要的物件,我還得學會 CAD,而我的工業設計技能,僅停在高一工藝課時學過的繪製三視圖而已。
看似有勇無謀?但是時代已經不一樣了,網路上只要用心去找,有很多完整的 CAD 教學課程影片、電子書,可以自修。於是從去年 11 月中旬開始,我就以習慣的「做中學」方式,自己找題目,畫出模型,印出來,累積了一些活用 FreeCAD 的基礎經驗與心得。
上圖是我最近完成最複雜的題目:重建一隻電子錶錶殼,可說用到了入門至今習得的每項 3D CAD & FDM 技術。
能親手讓少年時配戴的手錶重新服役,這種成就感讓我非常得意。
我很愛收看 Discovery 與 DMAX 頻道的幾個翻新老車、舊物的節目,像是「翻新中古車」、「舊貨獵人」、「柴油車卡好」、「女子修車手」、「改車特攻隊」、「頂級改裝車廠」等,尤其之前疫情方熾、我與確診的家人居家隔離、自己在客廳搞定起居、睡了十天的折疊床,這些節目除了讓我不致太無聊,也更加深了我想要「做實物」、「精緻維修」的念頭。
於是後來我趁著公司資本額燒完前,決定買下一台 3D 列印機。在這之前,我原本打算採用發包給代印業者的方式,不要自己養機器,因為我實在找不到家裡還有什麼空間,可以擺放這麼一台龐然大物,且不會被好奇的貓咪搗蛋搞破壞的。還好最後我弟同意借我房間的一角,真的很感謝我弟。
然後我也很感謝自己,做了自己持有機器的決定,因為 3D 列印也存在許多眉眉角角,如果沒有親身操作過,不會知道自以為應該沒問題的 3D 模型檔案,列印時是困難重重的。
像是不同列印材料的特性、三軸移動的限制、擠出機的速度控制、列印平台的校正、噴嘴的口徑、堆疊成型的方式直接影響模型設計思維等。這些林林總總的因素,很多甚至還是 case by case 的,像是同廠牌的 PLA 印材,也會有不同的最佳加熱溫度、列印速度。
FDM 型 3D 列印機無論消費級還是專業級,噴頭口徑就是落在 0.x mm 的範圍,這也影響了物件的精度,不過如果切片軟體 (slicer) 掌握得宜,還是可以產出可用的成品,可說「3D CAD 軟體」、「切片軟體」、「列印機材」是吃這行飯必須熟稔的三本柱。