Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
9e1660e6
Commit
9e1660e6
authored
Dec 24, 2023
by
Daniele Viti
Browse files
Be able to configure compose from a shell program
parent
ac34a797
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
211 additions
and
0 deletions
+211
-0
run-compose.sh
run-compose.sh
+211
-0
No files found.
run-compose.sh
0 → 100755
View file @
9e1660e6
#!/bin/bash
# Define color and formatting codes
BOLD
=
'\033[1m'
GREEN
=
'\033[1;32m'
WHITE
=
'\033[1;37m'
RED
=
'\033[0;31m'
NC
=
'\033[0m'
# No Color
# Unicode character for tick mark
TICK
=
'\u2713'
# Detect GPU driver
get_gpu_driver
()
{
# Detect NVIDIA GPUs
if
lspci |
grep
-i
nvidia
>
/dev/null
;
then
echo
"nvidia"
return
fi
# Detect AMD GPUs (including GCN architecture check for amdgpu vs radeon)
if
lspci |
grep
-i
amd
>
/dev/null
;
then
# List of known GCN and later architecture cards
# This is a simplified list, and in a real-world scenario, you'd want a more comprehensive one
local
gcn_and_later
=(
"Radeon HD 7000"
"Radeon HD 8000"
"Radeon R5"
"Radeon R7"
"Radeon R9"
"Radeon RX"
)
# Get GPU information
local
gpu_info
=
$(
lspci |
grep
-i
'vga.*amd'
)
for
model
in
"
${
gcn_and_later
[@]
}
"
;
do
if
echo
"
$gpu_info
"
|
grep
-iq
"
$model
"
;
then
echo
"amdgpu"
return
fi
done
# Default to radeon if no GCN or later architecture is detected
echo
"radeon"
return
fi
# Detect Intel GPUs
if
lspci |
grep
-i
intel
>
/dev/null
;
then
echo
"i915"
return
fi
# If no known GPU is detected
echo
"Unknown or unsupported GPU driver"
exit
1
}
# Function for rolling animation
show_loading
()
{
local
spin
=
'-\|/'
local
i
=
0
printf
" "
while
kill
-0
$1
2>/dev/null
;
do
i
=
$((
(
i+1
)
%
4
))
printf
"
\b
${
spin
:
$i
:1
}
"
sleep
.1
done
# Replace the spinner with a tick
printf
"
\b
${
GREEN
}${
TICK
}${
NC
}
"
}
# Usage information
usage
()
{
echo
"Usage:
$0
[OPTIONS]"
echo
"Options:"
echo
" --enable-gpu[count=COUNT] Enable GPU support with the specified count."
echo
" --enable-api[port=PORT] Enable API and expose it on the specified port."
echo
" --webui[port=PORT] Set the port for the web user interface."
echo
" --data[folder=PATH] Bind mount for ollama data folder (by default will create the 'ollama' volume)."
echo
" -q, --quiet Run script in headless mode."
echo
" -h, --help Show this help message."
echo
""
echo
"Examples:"
echo
"
$0
--enable-gpu[count=1]"
echo
"
$0
--enable-api[port=11435]"
echo
"
$0
--enable-gpu[count=1] --enable-api[port=12345] --webui[port=3000]"
echo
"
$0
--enable-gpu[count=1] --enable-api[port=12345] --webui[port=3000] --data[folder=./ollama-data]"
echo
""
echo
"This script configures and runs a docker-compose setup with optional GPU support, API exposure, and web UI configuration."
echo
"About the gpu to use, the script automatically detects it using the "
lspci
" command."
echo
"In this case the gpu detected is:
$(
get_gpu_driver
)
"
}
# Default values
gpu_count
=
1
api_port
=
11435
webui_port
=
3000
headless
=
false
# Function to extract value from the parameter
extract_value
()
{
echo
"
$1
"
|
sed
-E
's/.*\[.*=(.*)\].*/\1/; t; s/.*//'
}
# Parse arguments
while
[[
$#
-gt
0
]]
;
do
key
=
"
$1
"
case
$key
in
--enable-gpu
*
)
enable_gpu
=
true
value
=
$(
extract_value
"
$key
"
)
gpu_count
=
${
value
:-
1
}
;;
--enable-api
*
)
enable_api
=
true
value
=
$(
extract_value
"
$key
"
)
api_port
=
${
value
:-
11435
}
;;
--webui
*
)
value
=
$(
extract_value
"
$key
"
)
webui_port
=
${
value
:-
3000
}
;;
--data
*
)
value
=
$(
extract_value
"
$key
"
)
data_dir
=
${
value
:-
"./ollama-data"
}
;;
-q
|
--quiet
)
headless
=
true
;;
-h
|
--help
)
usage
exit
;;
*
)
# Unknown option
echo
"Unknown option:
$key
"
usage
exit
1
;;
esac
shift
# past argument or value
done
DEFAULT_COMPOSE_COMMAND
=
"docker compose -f docker-compose.yaml"
if
[[
$enable_gpu
==
true
]]
;
then
# Validate and process command-line arguments
if
[[
-n
$gpu_count
]]
;
then
if
!
[[
$gpu_count
=
~ ^[0-9]+
$
]]
;
then
echo
"Invalid GPU count:
$gpu_count
"
exit
1
fi
# Add your GPU allocation logic here
export
OLLAMA_GPU_DRIVER
=
$(
get_gpu_driver
)
export
OLLAMA_GPU_COUNT
=
$gpu_count
# Set OLLAMA_GPU_COUNT environment variable
fi
DEFAULT_COMPOSE_COMMAND+
=
" -f docker-compose.gpu.yaml"
fi
if
[[
$enable_api
==
true
]]
;
then
DEFAULT_COMPOSE_COMMAND+
=
" -f docker-compose.api.yaml"
if
[[
-n
$api_port
]]
;
then
export
OLLAMA_WEBAPI_PORT
=
$api_port
# Set OLLAMA_WEBAPI_PORT environment variable
fi
fi
if
[[
-n
$data_dir
]]
;
then
DEFAULT_COMPOSE_COMMAND+
=
" -f docker-compose.data.yaml"
export
OLLAMA_DATA_DIR
=
$data_dir
# Set OLLAMA_DATA_DIR environment variable
fi
DEFAULT_COMPOSE_COMMAND+
=
" up -d > /dev/null 2>&1"
# Recap of environment variables
echo
echo
-e
"
${
WHITE
}${
BOLD
}
Current Setup:
${
NC
}
"
echo
-e
"
${
GREEN
}${
BOLD
}
GPU Driver:
${
NC
}
${
OLLAMA_GPU_DRIVER
:-
Not
Enabled
}
"
echo
-e
"
${
GREEN
}${
BOLD
}
GPU Count:
${
NC
}
${
OLLAMA_GPU_COUNT
:-
Not
Enabled
}
"
echo
-e
"
${
GREEN
}${
BOLD
}
WebAPI Port:
${
NC
}
${
OLLAMA_WEBAPI_PORT
:-
Not
Enabled
}
"
echo
-e
"
${
GREEN
}${
BOLD
}
Data Folder:
${
NC
}
${
data_dir
:-
Using
ollama volume
}
"
echo
-e
"
${
GREEN
}${
BOLD
}
WebUI Port:
${
NC
}
$webui_port
"
echo
if
[[
$headless
==
true
]]
;
then
echo
-ne
"
${
WHITE
}${
BOLD
}
Running in headless mode...
${
NC
}
"
choice
=
"y"
else
# Ask for user acceptance
echo
-ne
"
${
WHITE
}${
BOLD
}
Do you want to proceed with current setup? (Y/n):
${
NC
}
"
read
-n1
-s
choice
fi
if
[[
$choice
==
""
||
$choice
==
"y"
]]
;
then
# Execute the command with the current user
eval
"docker compose down > /dev/null 2>&1;
$DEFAULT_COMPOSE_COMMAND
"
&
# Capture the background process PID
PID
=
$!
# Display the loading animation
show_loading
$PID
# Wait for the command to finish
wait
$PID
echo
# Check exit status
if
[
$?
-eq
0
]
;
then
echo
-e
"
${
GREEN
}${
BOLD
}
Compose project started successfully.
${
NC
}
"
else
echo
-e
"
${
RED
}${
BOLD
}
There was an error starting the compose project.
${
NC
}
"
fi
else
echo
"Aborted."
fi
echo
\ No newline at end of file
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment