2024/6/25

rearrage local repo to mirror format

用.repo提供bsp,不給 repo server access 權限的。
自己要做 repo mirror.
用repo forall 來run 這個:
$ cat pp.py
#!/usr/bin/python
import os
import subprocess

rfolder ='/home/charles-chang/rr3/'
lfolder ='/home/charles-chang/MY_Android14/'

repo_project = os.getenv('REPO_PROJECT','test/demo')
repo_path = os.getenv('REPO_PATH','repomirror')

pname = rfolder + os.path.dirname(repo_project)
print(f"REPO_PROJECT: {repo_project} {pname}")
print(f"REPO_PATH: {repo_path}")

os.makedirs(pname,exist_ok=True)
tname = rfolder + repo_project +'.git'
print(f"{tname}")

result = subprocess.run(["git","clone","--no-local","--mirror",lfolder+repo_path,tname])
就是:
repo forall -c /home/charles-chang/pp.py
就會create一個 repo server folder: rr3

第一步,repo sync -l 後,要做 git clone 其中的 project,會出現 Error:
結果是因為 symbolic link 的關係: 所以mirror 的時候要加上 --no-local

結果 .repo/project-object 裡面的 folder 安排方式就是 mirror 的方式,可惜 git 內容不是 mirror 的...

一些問題:

repo init 指定 -m XXX時,不單純只是把 manifest.xml 內容寫成 include XXX,同時會讀取 XXX 的內容,如果有問題,就會出現 Error,
然後這個 repo init 命令就會 Fail

manifests.git 所在位置和 manifest.xml 中,remote tag 的 fetch 有關,fetch="..\.." 的話,manifests.git 就要在 跟目錄的下一層通常是 platform 下。
如果直接在 project root,就用 fetch=".." 就可以。


做 repo sync動作時,會把git commit 內容輸出到 .repo/TRACE_FILE。
或是(舊版?),宣告環境變數 REPO_TRACE=1,可以輸出 Trace( ) 到 stdout.

同樣的,git 也可以輸出trace 就是用
GIT_CURL_VERBOSE=1
GIT_TRACE=1

2024/6/21

test raspberry pi 3 and camera v1.3

用的os 是: debian 11 (bullseye

camera上面有寫 "raspberry pi camera rev 1.3
這邊 的表格,v1 是 ov5647
所以到 /sys/module/ 下,果然有 ov5647 這個folder

然後看 這一篇,v1 的 camera support libcamera/raspicam
因為是 v1,所以好像不用修改 boot 的 config

測試:
$ sudo libcamera-hello -t 0
Preview window unavailable
[1:33:11.091798541] [1024]  INFO Camera camera_manager.cpp:297 libcamera v0.0.5+83-bde9b04f
[1:33:11.156468415] [1026]  INFO RPI vc4.cpp:437 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
[1:33:11.156605706] [1026]  INFO RPI pipeline_base.cpp:1101 Using configuration file '/usr/share/libcamera/pipeline/rpi/vc4/rpi_apps.yaml'
[1:33:11.158376798] [1024]  INFO Camera camera.cpp:1033 configuring streams: (0) 1296x972-YUV420
[1:33:11.159185495] [1026]  INFO RPI vc4.cpp:565 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 1296x972-SGBRG10_1X10 - Selected unicam format: 1296x
972-pGAA
#0 (0.00 fps) exp 33222.00 ag 8.00 dg 1.00
#1 (30.02 fps) exp 33222.00 ag 8.00 dg 1.00
#2 (30.02 fps) exp 33222.00 ag 8.00 dg 1.00
#3 (30.01 fps) exp 33222.00 ag 8.00 dg 1.00
#4 (30.02 fps) exp 33222.00 ag 8.00 dg 1.00
#5 (30.02 fps) exp 33222.00 ag 8.00 dg 1.00
#6 (30.02 fps) exp 33222.00 ag 8.00 dg 1.00
#7 (30.01 fps) exp 33222.00 ag 8.00 dg 1.00
..
試拍照:
$ libcamera-jpeg -o aaa.jpg 
Preview window unavailable
[0:09:19.152281879] [3180]  INFO Camera camera_manager.cpp:297 libcamera v0.0.5+83-bde9b04f
[0:09:19.216393888] [3181]  INFO RPI vc4.cpp:437 Registered camera /base/soc/i2c0mux/i2c@1/ov5647@36 to Unicam device /dev/media3 and ISP device /dev/media0
[0:09:19.216530450] [3181]  INFO RPI pipeline_base.cpp:1101 Using configuration file '/usr/share/libcamera/pipeline/rpi/vc4/rpi_apps.yaml'
[0:09:19.218294460] [3180]  INFO Camera camera.cpp:1033 configuring streams: (0) 1296x972-YUV420
[0:09:19.219118835] [3181]  INFO RPI vc4.cpp:565 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 1296x972-SGBRG10_1X10 - Selected unicam format: 1296x972-pGAA
#0 (0.00 fps) exp 9983.00 ag 1.31 dg 1.53
#1 (30.02 fps) exp 9983.00 ag 1.31 dg 1.54
#2 (30.02 fps) exp 10284.00 ag 2.00 dg 1.00
,...
#138 (30.02 fps) exp 14603.00 ag 2.00 dg 1.00
#139 (30.02 fps) exp 14626.00 ag 2.00 dg 1.00
#140 (30.02 fps) exp 14672.00 ag 2.00 dg 1.00
#141 (30.02 fps) exp 14672.00 ag 2.00 dg 1.00
[0:09:24.419749856] [3180]  INFO Camera camera.cpp:1033 configuring streams: (0) 2592x1944-YUV420 (1) 2592x1944-SGBRG10_CSI2P
[0:09:24.426256104] [3181]  INFO RPI vc4.cpp:565 Sensor: /base/soc/i2c0mux/i2c@1/ov5647@36 - Selected sensor format: 2592x1944-SGBRG10_1X10 - Selected unicam format: 2592x1944-pGAA
Still capture image received
然後 aaa.jpg 就是。

bookmark : wifi-direct on raspberry pi

2024/6/18

LLaVA : install and run

ref: 因為要上傳/顯示 img,所以不能用text-generation,這邊的demo 是用gradio
整個架構就像示意圖說明。有三個component:
  • web ui : 負責 web interface
  • controller : 負責把 llava 的query/response 轉成 api
  • worker : 就是 llava 本體
然後 worker 又有兩種選擇: 一個就是 llava 自己,一個是 SGlang worker 轉接。
SGLang 轉接的好處是 ?


前面 web ui, controller 都是 gradio,只有 worker 是 llava 服務本體。
所以依照說明,create conda env,clone LLaVA ....之後..
文件說明是用 pin install . 把 llava 跟 gradio 安裝進 evn.
-e 是為了之後可以 update

然後要 download model checkpoint : LLaVA MODEL ZOO 例如:
git clone https://huggingface.co/liuhaotian/llava-v1.6-mistral-7b
然後啟動 controller:
conda activate llava
cd LLaVA
python -m llava.serve.controller --host 0.0.0.0 --port 10000
開啟web ui
conda activate llava
cd LLaVA
python -m llava.serve.gradio_web_server --controller http://localhost:10000 --model-list-mode reload
最後啟動 llava worker,指定 download 的 model checkout folder:
conda activate llava
cd LLaVA
python -m llava.serve.model_worker --host 0.0.0.0 --controller http://localhost:10000 --port 40000 --worker http://localhost:40000 --model-path ../llava-v1.6-mistral-7b

2024/6/12

text-generation : missing module transformers_stream_generator

要 load Qwen-1_8B-Chat 時,出現 Error, 說缺了 transformers_stream_generator,
因為是用 start_linux.sh 啟動,所以要找到他的 conda env 來安裝。
在 start_linux.sh 中有。
所以是
$ source ./installer_files/conda/etc/profile.d/conda.sh
$ conda ./installer_files/env
$ pip install transformer_stream_generator
之後run start_linux.sh,load Qwen-1_8B-Chat 時就沒有 Error 了。

另外,因為這是中國的mode,所以用簡體回答,有時候會出現 Error:
text_generation.py, line 260, in get_reply_from_output_ids
  first_token = first_token.decode('utf8')
UnicodeDecodeError: 'utf-8' codec can't decode bytes in position 0-1: unexpected end of data
StackOverflow 說,decode 時,error handling 用 'ignore' 就可以。
所以去查 first_token 是 convert_ids_to_tokens( ) 的 return varlaibe. type 是 str。
所以去查 str.decode( ) 的宣告。
改成
  first_token.decode('utf8','ignore')
就可以了。