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
a580aa89
Commit
a580aa89
authored
Dec 23, 2023
by
Daniele Viti
Browse files
general-compose-improvements
parent
bbfe2fb1
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
214 additions
and
14 deletions
+214
-14
docker-compose.api.yaml
docker-compose.api.yaml
+6
-0
docker-compose.gpu.yaml
docker-compose.gpu.yaml
+12
-0
docker-compose.yaml
docker-compose.yaml
+2
-14
run-compose.sh
run-compose.sh
+194
-0
No files found.
docker-compose.api.yaml
0 → 100644
View file @
a580aa89
version
:
'
3.8'
services
:
ollama
:
ports
:
-
${OLLAMA_WEBAPI_PORT-11434}:11434
docker-compose.gpu.yaml
0 → 100644
View file @
a580aa89
version
:
'
3.8'
services
:
ollama
:
deploy
:
resources
:
reservations
:
devices
:
-
driver
:
${OLLAMA_GPU_DRIVER-nvidia}
count
:
${OLLAMA_GPU_COUNT-1}
capabilities
:
-
gpu
docker-compose.yml
→
docker-compose.y
a
ml
View file @
a580aa89
version
:
'
3.
6
'
version
:
'
3.
8
'
services
:
ollama
:
# Uncomment below for GPU support
# deploy:
# resources:
# reservations:
# devices:
# - driver: nvidia
# count: 1
# capabilities:
# - gpu
volumes
:
-
ollama:/root/.ollama
# Uncomment below to expose Ollama API outside the container stack
# ports:
# - 11434:11434
container_name
:
ollama
pull_policy
:
always
tty
:
true
...
...
@@ -33,7 +21,7 @@ services:
depends_on
:
-
ollama
ports
:
-
3000:8080
-
${OLLAMA_WEBUI_PORT-
3000
}
:8080
environment
:
-
"
OLLAMA_API_BASE_URL=http://ollama:11434/api"
extra_hosts
:
...
...
run-compose.sh
0 → 100755
View file @
a580aa89
#!/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
""
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
""
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
# Function to extract value from the parameter
extract_value
()
{
echo
"
$1
"
|
sed
-E
's/.*\[.*=(.*)\].*/\1/; t; s/.*//'
}
# Check if no arguments were provided
# if [ $# -eq 0 ]; then
# usage
# exit 1
# fi
# 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
}
;;
-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
echo
"Enabling GPU with
$gpu_count
GPUs"
# Add your GPU allocation logic here
export
OLLAMA_GPU_DRIVER
=
$(
get_gpu_driver
)
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
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
}
WebAPI Port:
${
NC
}
${
OLLAMA_WEBAPI_PORT
:-
Not
Enabled
}
"
echo
-e
"
${
GREEN
}${
BOLD
}
WebUI Port:
${
NC
}
$webui_port
"
echo
# Ask for user acceptance
echo
-ne
"
${
WHITE
}${
BOLD
}
Do you want to proceed with current setup? (Y/n):
${
NC
}
"
read
-n1
-s
choice
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