Last active
February 12, 2024 02:38
-
-
Save analysisjp/ee77b26dc83e1457a9e72c707b62075f to your computer and use it in GitHub Desktop.
Fixed memory leak issue in Ubuntu 22.04 environment (stable-diffusion-webui-forge)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
From 84749342c93491d829da65d9c89a7af94a9469b2 Mon Sep 17 00:00:00 2001 | |
From: supercat <supercat@gmail.com> | |
Date: Tue, 6 Feb 2024 23:17:14 +0900 | |
Subject: [PATCH] Fixed memory leak issue in Ubuntu 22.04 or modern linux | |
environment | |
--- | |
webui.sh | 70 +++++++++++++++++++++++++++++++++++++------------------- | |
1 file changed, 47 insertions(+), 23 deletions(-) | |
diff --git a/webui.sh b/webui.sh | |
index 25b94906..2ac305af 100755 | |
--- a/webui.sh | |
+++ b/webui.sh | |
@@ -226,33 +226,57 @@ fi | |
# Try using TCMalloc on Linux | |
prepare_tcmalloc() { | |
if [[ "${OSTYPE}" == "linux"* ]] && [[ -z "${NO_TCMALLOC}" ]] && [[ -z "${LD_PRELOAD}" ]]; then | |
- # Define Tcmalloc Libs arrays | |
- TCMALLOC_LIBS=("libtcmalloc(_minimal|)\.so\.\d" "libtcmalloc\.so\.\d") | |
- | |
- # Traversal array | |
- for lib in "${TCMALLOC_LIBS[@]}" | |
- do | |
- #Determine which type of tcmalloc library the library supports | |
- TCMALLOC="$(PATH=/usr/sbin:$PATH ldconfig -p | grep -P $lib | head -n 1)" | |
- TC_INFO=(${TCMALLOC//=>/}) | |
- if [[ ! -z "${TC_INFO}" ]]; then | |
- echo "Using TCMalloc: ${TC_INFO}" | |
- #Determine if the library is linked to libptthread and resolve undefined symbol: ptthread_Key_Create | |
- if ldd ${TC_INFO[2]} | grep -q 'libpthread'; then | |
- echo "$TC_INFO is linked with libpthread,execute LD_PRELOAD=${TC_INFO}" | |
- export LD_PRELOAD="${TC_INFO}" | |
- break | |
- else | |
- echo "$TC_INFO is not linked with libpthreadand will trigger undefined symbol: ptthread_Key_Create error" | |
- fi | |
- else | |
- printf "\e[1m\e[31mCannot locate TCMalloc (improves CPU memory usage)\e[0m\n" | |
- fi | |
- done | |
+ # check glibc version | |
+ LIBC_LIB="$(PATH=/usr/sbin:$PATH ldconfig -p | grep -P "libc.so.6" | head -n 1)" | |
+ LIBC_INFO=$(echo ${LIBC_LIB} | awk '{print $NF}') | |
+ LIBC_VER=$(echo $(${LIBC_INFO} | awk 'NR==1 {print $NF}') | grep -oP '\d+\.\d+') | |
+ echo "glibc version is $LIBC_VER" | |
+ vernum=$(expr $LIBC_VER) | |
+ # Since 2.34 libpthread is integrated into libc | |
+ libc_v234=2.34 | |
+ | |
+ if [ $(echo "$vernum < $libc_v234" | bc) -eq 1 ]; then | |
+ # glibc < 2.33 ptthread_Key_Create into libpthead.so | |
+ # Define Tcmalloc Libs arrays | |
+ TCMALLOC_LIBS=("libtcmalloc(_minimal|)\.so\.\d" "libtcmalloc\.so\.\d") | |
+ | |
+ # Traversal array | |
+ for lib in "${TCMALLOC_LIBS[@]}" | |
+ do | |
+ #Determine which type of tcmalloc library the library supports | |
+ TCMALLOC="$(PATH=/usr/sbin:$PATH ldconfig -p | grep -P $lib | head -n 1)" | |
+ echo ${TCMALLOC} | |
+ TC_INFO=(${TCMALLOC//=>/}) | |
+ if [[ ! -z "${TC_INFO}" ]]; then | |
+ echo "Using TCMalloc: ${TC_INFO}" | |
+ #Determine if the library is linked to libptthread and resolve undefined symbol: ptthread_Key_Create | |
+ if ldd ${TC_INFO[2]} | grep -q 'libpthread'; then | |
+ echo "$TC_INFO is linked with libpthread,execute LD_PRELOAD=${TC_INFO}" | |
+ export LD_PRELOAD="${TC_INFO}" | |
+ break | |
+ else | |
+ echo "$TC_INFO is not linked with libpthread will trigger undefined symbol: pthread_Key_Create error" | |
+ fi | |
+ else | |
+ printf "\e[1m\e[31mCannot locate TCMalloc (improves CPU memory usage)\e[0m\n" | |
+ fi | |
+ done | |
+ | |
+ else | |
+ # glibc >= 2.34 pthread_Key_Create into libc.so (ubuntu 22.04 and modern linux system) | |
+ TCMALLOC="$(PATH=/sbin:$PATH ldconfig -p | grep -Po "libtcmalloc(_minimal|)\.so\.\d" | head -n 1)" | |
+ if [[ ! -z "${TCMALLOC}" ]]; then | |
+ echo "Using TCMalloc: ${TCMALLOC}" | |
+ export LD_PRELOAD="${TCMALLOC}" | |
+ else | |
+ printf "\e[1m\e[31mCannot locate TCMalloc (improves CPU memory usage)\e[0m\n" | |
+ fi | |
+ fi | |
fi | |
} | |
+ | |
KEEP_GOING=1 | |
export SD_WEBUI_RESTART=tmp/restart | |
while [[ "$KEEP_GOING" -eq "1" ]]; do | |
-- | |
2.34.1 |
I threw the same at lllyasviel/stable-diffusion-webui-forge#60
イリヤちゃんにプルリクしたんやが手下のサーヴァントに「んなもんA1111に言うてくれや」言われて駄目でしたわとほほ😿
なんやあいつらは身内でチャプチャプしたいんやろかね😾
ということで、このパッチを自分で当ててもらうか、パッチ当てるん嫌なら「webui-user.sh」に
LD_PRELOAD="/lib/x86_64-linux-gnu/libtcmalloc_minimal.so.4"
って書き足さないと何か画像生成のたびにメモリ圧迫してそのうちOOMで堕ちるから注意してな
本家A1111のほうへプルリクしたわ
なぜTcmallocが必要か理由も書いといたからまた見たってや
AUTOMATIC1111/stable-diffusion-webui#14883
ただ、春節だからもしかしたら見てくれるの遅いかもな〜
しかしまぁ箱みかんニキの提案も本家に云うてくれいうとるし、なんかそういう覚悟でforkしたわけじゃなさそうやねあの人たち
lllyasviel/stable-diffusion-webui-forge#151
ええ話や
A1111のDevにマージされたわ
今後このパッチはいらんようになるかもな
forgeのmainブランチに目出度く反映されたようや
もうこのglistは用済みなんで消してもええんやが記録のために残しとくわ
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
tcmalloc is included in google-perftools and must be installed.
'''
$ sudo apt install google-perftools
'''