2022/10/20

Stable-Diffusion-Webui

Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.
所以
python webui.py --listen
結果是看這一個。
要 clont source,還要另外 download model.ckpt。

然後啟動 webui.py

最近的吃面輸出..我的是..


這一篇有一些 animate model,一開始還有用 command line download magnet 的 package 安裝
這個是一個給 linux 用的 install script,預先用conda create 好python3 的環境。
然後這一篇 是官方的安裝說明?
還有說要一些其他的 package ,例如
Linux 安裝大概就是:

安裝 python 3.10 環境 (conda ?)
git clone git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
copy ckpt 到 models/Stable-diffusion 下,rename model.ckpt
run webui.sh
它會create venv,再裡面安裝 requirments.txt
所以要單獨run webui.py 的話,要自己install requirement.txt
然後還是有一些沒裝, clip, gdown,
看 webui.sh,啟動 venv 後就 run launch.py
launch.py 安裝 gfpgan, clip, xformers, deepdanbooru, pyngrok
再 install requirements.txt


2024/11/8 update:
用 conda
conda create -n stablediffusion python=3.11
進去之後,clone
git clone https://github.com/AUTOMATIC1111/stable-diffusion-webui
因為是用 conda,所以修改 webui-user.sh:
diff --git a/webui-user.sh b/webui-user.sh
index 70306c60..ac9cf712 100644
--- a/webui-user.sh
+++ b/webui-user.sh
@@ -19,7 +19,7 @@
 #export GIT="git"

 # python3 venv without trailing slash (defaults to ${install_dir}/${clone_dir}/venv)
-#venv_dir="venv"
+venv_dir="-"
可以看 webui.sh,裡面有關 venv_dir
之後就是自動...
$ ./webui.sh

################################################################
Install script for stable-diffusion + Web UI
Tested on Debian 11 (Bullseye), Fedora 34+ and openSUSE Leap 15.4 or newer.
..
這一版會自動下載 ckpt..
Downloading: "https://huggingface.co/runwayml/stable-diffusion-v1-5/resolve/main/v1-5-pruned-emaonly.safetensors" to /home...sion-webui/models/Stable-diffusion/v1-5-pruned-emaonly.safetensors
其實需要..
sudo apt-get install google-perftools
要安裝xformers 的話,可以啟動加上
$ ./webui.sh --xformers
他檢查到沒有,就會安裝,之後就不用加這個 option。

2022/10/13

set default gw metrics for multiple NIC

因為有兩張網卡,都是m dhcp,所以最後會有兩個 metric 都是 100 的 default gw。
因為這兩個網卡網段不一樣。所以連線就會 fail。
要在 netplan 設定 route metrics。依照說明是用:
  enp3s0:
    dhcp4: true
    dhcp4-overrides:
      route-metric: 200
大概是這樣,把 metric 設為 大於 100,就不會優先用他。
但是修改完用 netplan try,出現 Error: Error while loading /etc/netplan/50-cloud-init.yaml
所以只好用另一個方法:
cp /run/systemd/network/10-netplan-enp4s0.network /etc/systemd/network/
然後修改 /etc/systemd/network/10-netplan-enp4s0.network:
[DHCP]
RouteMetric=200
..

scp指定 NIC

要單獨取的某 interface 的 ip (v4)
ip -4 addr show enp3s0 | awk '/inet/ {print $2}' | cut -d/ -f1

要指定 scp 使用哪個 interface,就要...
scp -o BindAddress=192.168.145.58 myfile remotehost:~/
如果要在 ip addr 的輸出中篩出來,就要先用 grep 過濾,
grep -A 2 enp3s0: ip-addr-out-file
-A 2 就是show 後面兩行。

2022/10/12

cross compile mener (mender-client) for aarch64

其實就是照 官方文件 說的..
  • cross build openssl
  • cross build xz
  • cross build mender (client)
原先想用target board 上 buildroot build 好的 openssl 跟 xz,結果在 make 的時候,說找不到 libz.so
即使有把 libz.so 也放到 -L libpath,結果也一樣。
應該是沒有加上 -lz

所以只好依照官方文件,corss build openssl,這樣就會 disable zlib support,就不會需要 libz。
最後是偷懶把 openssl, xz 的 include/* copy 到 mylib/include,把 lib/* copy 到 mylib/lib

先加入 cross-compile toolpath
在宣告 cross compile tool:
export CC=aarch64-linux-gnu-gcc
然後 make
make CGO_CFLAGS="-I/home/charles-chang/mylib/include" CGO_LDFLAGS="-L/home/charles-chang/mylib/lib" CGO_ENABLE=1 GOOS=linux GOARCH=arm64 TAGS=nodbus
如果要 dbus 的話,還要 cross compile glib

其他這注意事項:
用 go 1.10 版失敗,先是說 main.go app 找不到,他一定要在 $GOPATH/src/github.com/mendersoftware,
但是照著 set GOPATH,clone ,error 變成語法錯誤。
最後還是改用 go 1.13 直接就成功了。

就 apt install golang-1.13,然後手動改 /usr/bin/go link 到 ../lib/go-1.13.0/bin/go

2022/10/11

cross-compile openssl for linux-aarch64

Configure 有:
   CROSS_COMPILE => env('CROSS_COMPILE'),
所以猜..

用 linaro 的話,安裝在 /usr/local/linaro-aarch64-2020.09-gcc10.2-linux5.4/bin/
toolchain prefix 是 aarch64-linux-gnu

Configure 中也有:
--cross-compile-prefix=
結果用了這個configure:
./Configure linux-aarch64 --cross-compile-prefix=aarch64-linux-gnu- --shared --prefix=/home/charles/myssl
竟然就 build OK ?!
打開 configure 出來的 Makefile 看...
OPTIONS=--cross-compile-prefix=aarch64-linux-gnu- enable-shared --prefix=/home/charles-chang/myssl no-afalgeng no-asan no-buildtest-c++ 
 no-crypto-mdebug no-crypto-mdebug-backtrace no-devcryptoeng no-ec_nistp_64_gcc_128 no-egd no-external-tests no-fuzz-afl no-fuzz-libfuzzer
 no-heartbeats no-md2 no-msan no-rc5 no-sctp no-ssl-trace no-ssl3 no-ssl3-method no-ubsan no-unit-test no-weak-ssl-ciphers no-zlib
 no-zlib-dynamic
原來所有 support lib option 都 off 了。


附帶 liblzma (xz) 的 cross-compile:
看 configure..
  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
其他就沒了,所以猜是
./configure --host=aarch64-linux-gnu --prefix=/home/charles-chang/myxz
果然這樣make 就 OK 了。

其他看 configure 可以知道,要 build static libary 的話,就 --enable-static (--enable-shared 是 default 就有的)

2022/9/29

Compile.h Error on building kernel w clang

./include/generated/compile.h:7:24: warning: missing terminating '"' character [-Winvalid-pp-token]
#define LINUX_COMPILER "Android (7284624, based on r416183b) clang version 12.0.5 (https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee)
                       ^
./include/generated/compile.h:8:1: error: unknown type name 'Found'
去看 error source,是在 kernel source 里:
kernel-4.19/include/generated/compile.h
在產生 compile.h 的時候...
#define LINUX_COMPILER "Android (7284624, based on r416183b) clang version 12.0.5 (https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee)
Found CUDA installation: /usr/local/cuda, version 11.0, LLD 12.0.5 (/buildbot/src/android/llvm-toolchain/out/llvm-project/lld c935d99d7cf2016289302412d708641d52d2f7ee)"
define 不支援斷行...

init/Makefile:
   $(Q)$(CONFIG_SHELL) $(srctree)/scripts/mkcompile_h $@   \
    "$(UTS_MACHINE)" "$(CONFIG_SMP)" "$(CONFIG_PREEMPT)"    \
    "$(CC) $(KBUILD_CFLAGS)" "$(LD)"
然後 mkcompile_h 中:
TARGET=$1
ARCH=$2
SMP=$3
PREEMPT=$4
CC=$5
LD=$6

..

( echo /\* This file is auto generated, version $VERSION \*/
  if [ -n "$CONFIG_FLAGS" ] ; then echo "/* $CONFIG_FLAGS */"; fi

  echo \#define UTS_MACHINE \"$ARCH\"

  echo \#define UTS_VERSION \"`echo $UTS_VERSION | $UTS_TRUNCATE`\"

  echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
  echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"

  CC_VERSION=$($CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//')
  LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \
              | sed 's/[[:space:]]*$//')
  printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION"
) > .tmpcompile
這個script 在 kernel 5.X 之後由 Kconfig 取代了。

測試一下 CC_VERSION 的產生: $CC -v
Android 這邊是用 prebuild 內的 clang。
執行結果:
prebuilts/clang/host/linux-x86/clang-3289846$ bin/clang -v
Android clang version 3.8.275480  (based on LLVM 3.8.275480)
Target: x86_64-unknown-linux
Thread model: posix
InstalledDir: /home/charles-chang/Android12/prebuilts/clang/host/linux-x86/clang-3289846/bin
Found candidate GCC installation: /usr/lib/gcc/i686-linux-gnu/8
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/6.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Found candidate GCC installation: /usr/lib/gcc/x86_64-linux-gnu/8
Selected GCC installation: /usr/lib/gcc/x86_64-linux-gnu/7.5.0
Candidate multilib: .;@m64
Candidate multilib: 32;@m32
Candidate multilib: x32;@mx32
Selected multilib: .;@m64
Found CUDA installation: /usr/local/cuda, version unknown
果然出現 CUDA,因為也有 version 字樣,所以有出現在後面的 grep 結果。

所以把 grep ' version ' 改 'clang version ' 試試...
好像 OK, compile.h 有問題的部份變成...
#define LINUX_COMPILER "Android (7284624, based on r416183b) clang version 12.0.5 (https://android.googlesource.com/toolchain/llvm-project c935d99d7cf2016289302412d708641d52d2f7ee), LLD 12.0.5 (/buildbot/src/android/llvm-toolchain/out/llvm-project/lld c935d99d7cf2016289302412d708641d52d2f7ee)"
--- 但是要是不是用 clang 就會 fail 吧...
改只取line 1 好了...
kernel-4.19$ git diff
diff --git a/scripts/mkcompile_h b/scripts/mkcompile_h
index 19de4cdef1ec..b1e1d7540b9c 100755
--- a/scripts/mkcompile_h
+++ b/scripts/mkcompile_h
@@ -73,7 +73,7 @@ UTS_TRUNCATE="cut -b -$UTS_LEN"
   echo \#define LINUX_COMPILE_BY \"`echo $LINUX_COMPILE_BY | $UTS_TRUNCATE`\"
   echo \#define LINUX_COMPILE_HOST \"`echo $LINUX_COMPILE_HOST | $UTS_TRUNCATE`\"
 
-  CC_VERSION=$($CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//')
+  CC_VERSION=$($CC -v 2>&1 | grep ' version ' | sed 's/[[:space:]]*$//' | head -n 1)
   LD_VERSION=$($LD -v | head -n1 | sed 's/(compatible with [^)]*)//' \
                      | sed 's/[[:space:]]*$//')
   printf '#define LINUX_COMPILER "%s"\n' "$CC_VERSION, $LD_VERSION"

intel I219 NIC, ubuntu 20.04

這個 PCI NIC 要到 22.04 才有support,所以這版只能自己 build。
intel 官網有 source code,但是是手動,所以要是kernel 更新,就要手動 build 一次。
所以依照網路說,用dkms support 版。
依照說明,copy source 到 /usr/src 後,用 dkms command 做
cp -r e1000e-dkms/usr/src/e1000e-3.8.7 /usr/src/
dkms add -m e1000e -v 3.8.7
dkms build -m e1000e -v 3.8.7
dkms install -m e1000e -v 3.8.7
這樣build 完,手動 modprobe e1000e,就可以用 dhcpclient 取得 IP

但是,開機後不會自動 load..
所以參考這一篇,新增:
$cat /etc/modoprobe.d/e1000e.conf
e1000e
這樣開機就會自動 load 了,
剩下不會自動取得 IP,所以參考這一篇,修改 /etc/netplan/00-instale-config.yaml
network:
 ethernets:
   eno1:
     dhcp4: true
   version: 2
這樣就 OK 了。


另外,這一篇 說明從 intel source code 改成 dkms 的方法。