Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
Pinoxchio
apollo
提交
f18b9fee
A
apollo
项目概览
Pinoxchio
/
apollo
与 Fork 源项目一致
从无法访问的项目Fork
通知
2
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
A
apollo
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
f18b9fee
编写于
1月 29, 2021
作者:
S
storypku
提交者:
Liu Jiaming
2月 05, 2021
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Docker: Added runtime_start.sh and runtime_into.sh
上级
cfe9b3c5
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
462 addition
and
0 deletion
+462
-0
docker/scripts/runtime_into.sh
docker/scripts/runtime_into.sh
+27
-0
docker/scripts/runtime_start.sh
docker/scripts/runtime_start.sh
+435
-0
未找到文件。
docker/scripts/runtime_into.sh
0 → 100755
浏览文件 @
f18b9fee
#!/usr/bin/env bash
###############################################################################
# Copyright 2021 The Apollo Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################
DOCKER_USER
=
"
${
USER
}
"
RUNTIME_CONTAINER
=
"apollo_runtime_
${
USER
}
"
xhost +local:root 1>/dev/null 2>&1
docker
exec
-u
"
${
DOCKER_USER
}
"
\
-it
"
${
RUNTIME_CONTAINER
}
"
\
/bin/bash
xhost
-local
:root 1>/dev/null 2>&1
docker/scripts/runtime_start.sh
0 → 100755
浏览文件 @
f18b9fee
#!/usr/bin/env bash
###############################################################################
# Copyright 2021 The Apollo Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
###############################################################################
APOLLO_ROOT_DIR
=
"
$(
cd
"
$(
dirname
"
${
BASH_SOURCE
[0]
}
"
)
/../.."
&&
pwd
-P
)
"
source
"
${
APOLLO_ROOT_DIR
}
/scripts/apollo.bashrc"
DOCKER_REPO
=
"apolloauto/apollo"
APOLLO_RUNTIME
=
"apollo_runtime_
${
USER
}
"
PROD_INSIDE
=
"in-runtime-docker"
HOST_ARCH
=
"
$(
uname
-m
)
"
HOST_OS
=
"
$(
uname
-s
)
"
TARGET_ARCH
=
"
$(
uname
-m
)
"
VERSION_X86_64
=
"dev-x86_64-18.04-20210204_2153"
USER_VERSION_OPT
=
DOCKER_RUN
=
"docker run"
FAST_MODE
=
"no"
GEOLOC
=
GEO_REGISTRY
=
USE_LOCAL_IMAGE
=
0
USE_GPU_HOST
=
0
VOLUME_VERSION
=
"latest"
SHM_SIZE
=
"2G"
USER_SPECIFIED_MAPS
=
MAP_VOLUMES_CONF
=
OTHER_VOLUMES_CONF
=
DEFAULT_MAPS
=(
sunnyvale_big_loop
sunnyvale_loop
sunnyvale_with_two_offices
san_mateo
)
DEFAULT_TEST_MAPS
=(
sunnyvale_big_loop
sunnyvale_loop
)
function
_optarg_check_for_opt
()
{
local
opt
=
"
$1
"
local
optarg
=
"
$2
"
if
[[
-z
"
${
optarg
}
"
||
"
${
optarg
}
"
=
~ ^-.
*
]]
;
then
error
"Missing argument for
${
opt
}
. Exiting..."
exit
2
fi
}
function
show_usage
()
{
cat
<<
EOF
Usage:
$0
[options] ...
OPTIONS:
-h, --help Display this help and exit.
-f, --fast Fast mode without pulling all map volumes.
-g, --geo <us|cn|none> Pull docker image from geolocation specific registry mirror.
-l, --local Use local docker image.
-t, --tag <TAG> Specify docker image with tag <TAG> to start.
--shm-size <bytes> Size of /dev/shm . Passed directly to "docker run"
EOF
}
function
geo_specific_config
()
{
local
geo
=
"
$1
"
if
[[
-z
"
${
geo
}
"
]]
;
then
info
"Use default GeoLocation settings"
elif
[[
"
${
geo
}
"
==
"cn"
]]
;
then
info
"GeoLocation settings for Mainland China"
GEO_REGISTRY
=
"registry.baidubce.com"
else
info
"GeoLocation settings for
${
geo
}
is not ready, fallback to default"
fi
}
function
parse_arguments
()
{
local
custom_version
=
""
local
shm_size
=
""
local
geo
=
""
while
[
$#
-gt
0
]
;
do
local
opt
=
"
$1
"
shift
case
"
${
opt
}
"
in
-t
|
--tag
)
if
[
-n
"
${
custom_version
}
"
]
;
then
warning
"Multiple option
${
opt
}
specified, only the last one will take effect."
fi
custom_version
=
"
$1
"
shift
_optarg_check_for_opt
"
${
opt
}
"
"
${
custom_version
}
"
;;
-h
|
--help
)
show_usage
exit
1
;;
-f
|
--fast
)
FAST_MODE
=
"yes"
;;
-g
|
--geo
)
geo
=
"
$1
"
shift
_optarg_check_for_opt
"
${
opt
}
"
"
${
geo
}
"
;;
-l
|
--local
)
USE_LOCAL_IMAGE
=
1
;;
--shm-size
)
shm_size
=
"
$1
"
shift
_optarg_check_for_opt
"
${
opt
}
"
"
${
shm_size
}
"
;;
--map
)
map_name
=
"
$1
"
shift
USER_SPECIFIED_MAPS
=
"
${
USER_SPECIFIED_MAPS
}
${
map_name
}
"
;;
*
)
warning
"Unknown option:
${
opt
}
"
exit
2
;;
esac
done
# End while loop
[[
-n
"
${
geo
}
"
]]
&&
GEOLOC
=
"
${
geo
}
"
[[
-n
"
${
custom_version
}
"
]]
&&
USER_VERSION_OPT
=
"
${
custom_version
}
"
[[
-n
"
${
shm_size
}
"
]]
&&
SHM_SIZE
=
"
${
shm_size
}
"
}
function
determine_runtime_image
()
{
local
version
=
"
$1
"
if
[[
-n
"
${
version
}
"
]]
;
then
APOLLO_RUNTIME_IMAGE
=
"
${
DOCKER_REPO
}
:
${
version
}
"
return
fi
if
[[
"
${
TARGET_ARCH
}
"
==
"x86_64"
]]
;
then
version
=
"
${
VERSION_X86_64
}
"
APOLLO_RUNTIME_IMAGE
=
"
${
DOCKER_REPO
}
:
${
version
}
"
else
error
"Runtime Docker for
${
TARGET_ARCH
}
Not Ready. Exiting..."
exit
3
fi
}
function
check_host_environment
()
{
if
[[
"
${
HOST_OS
}
"
!=
"Linux"
]]
;
then
warning
"Linux ONLY support for Apollo Runtime Docker!"
exit
1
fi
if
[[
"
${
HOST_ARCH
}
"
!=
"x86_64"
]]
;
then
warning
"Apollo Runtime Docker supports x86_64 ONLY!"
exit
2
fi
}
function
setup_devices_and_mount_local_volumes
()
{
local
__retval
=
"
$1
"
source
"
${
APOLLO_ROOT_DIR
}
/scripts/apollo_base.sh"
setup_device
local
volumes
=
"-v
${
APOLLO_ROOT_DIR
}
:/apollo"
local
os_release
=
"
$(
lsb_release
-rs
)
"
case
"
${
os_release
}
"
in
16.04
)
warning
"[Deprecated] Support for Ubuntu 16.04 will be removed"
\
"in the near future. Please upgrade to ubuntu 18.04+."
volumes
=
"
${
volumes
}
-v /dev:/dev"
;;
18.04
|
20.04
|
*
)
volumes
=
"
${
volumes
}
-v /dev:/dev"
;;
esac
volumes
=
"
${
volumes
}
-v /media:/media
\
-v /tmp/.X11-unix:/tmp/.X11-unix:rw
\
-v /etc/localtime:/etc/localtime:ro
\
-v /lib/modules:/lib/modules"
volumes
=
"
$(
tr
-s
" "
<<<
"
${
volumes
}
"
)
"
eval
"
${
__retval
}
='
${
volumes
}
'"
}
function
determine_gpu_use_host
()
{
# Check nvidia-driver and GPU device
local
nv_driver
=
"nvidia-smi"
if
[
!
-x
"
$(
command
-v
${
nv_driver
}
)
"
]
;
then
warning
"nvidia-smi not found. CPU will be used."
elif
[
-z
"
$(
eval
${
nv_driver
}
)
"
]
;
then
warning
"No GPU device found. CPU will be used."
else
USE_GPU_HOST
=
1
fi
# Try to use GPU inside container
local
nv_docker_doc
=
"https://github.com/NVIDIA/nvidia-docker/blob/master/README.md"
if
[
${
USE_GPU_HOST
}
-eq
1
]
;
then
DOCKER_VERSION
=
$(
docker version
--format
'{{.Server.Version}}'
)
if
[[
-x
"
$(
which nvidia-container-toolkit
)
"
]]
;
then
if
dpkg
--compare-versions
"
${
DOCKER_VERSION
}
"
"ge"
"19.03"
;
then
DOCKER_RUN
=
"docker run --gpus all"
else
warning
"You must upgrade to Docker-CE 19.03+ to access GPU from container!"
USE_GPU_HOST
=
0
fi
elif
[[
-x
"
$(
which nvidia-docker
)
"
]]
;
then
DOCKER_RUN
=
"nvidia-docker run"
else
USE_GPU_HOST
=
0
warning
"Cannot access GPU from within container. Please install "
\
"latest Docker and NVIDIA Container Toolkit as described by: "
warning
"
${
nv_docker_doc
}
"
fi
fi
}
function
remove_existing_container
()
{
if
docker ps
-a
--format
'{{.Names}}'
|
grep
-q
"
${
APOLLO_RUNTIME
}
"
;
then
docker stop
"
${
APOLLO_RUNTIME
}
"
>
/dev/null
docker
rm
-v
-f
"
${
APOLLO_RUNTIME
}
"
>
/dev/null
fi
}
function
docker_pull
()
{
local
img
=
"
$1
"
if
[[
"
${
USE_LOCAL_IMAGE
}
"
-gt
0
]]
;
then
if
docker images
--format
"{{.Repository}}:{{.Tag}}"
|
grep
-q
"
${
img
}
"
;
then
info
"Local image
${
img
}
found and will be used."
return
fi
warning
"Image
${
img
}
not found locally although local mode enabled. Trying to pull from remote registry."
fi
if
[[
-n
"
${
GEO_REGISTRY
}
"
]]
;
then
img
=
"
${
GEO_REGISTRY
}
/
${
img
}
"
fi
info
"Start pulling docker image
${
img
}
..."
if
!
docker pull
"
${
img
}
"
;
then
error
"Failed to pull docker image :
${
img
}
"
exit
1
fi
}
function
docker_restart_volume
()
{
local
container
=
"
$1
"
local
image
=
"
$2
"
info
"Restart volume
${
container
}
from image:
${
image
}
"
docker stop
"
${
container
}
"
&>/dev/null
docker_pull
"
${
image
}
"
docker run
-itd
--rm
--name
"
${
container
}
"
"
${
image
}
"
}
function
restart_map_volume_if_needed
()
{
local
map_name
=
"
$1
"
local
map_version
=
"
$2
"
local
map_volume
=
"apollo_map_volume-
${
map_name
}
_
${
USER
}
"
if
[[
${
MAP_VOLUMES_CONF
}
==
*
"
${
map_volume
}
"
*
]]
;
then
info
"Map
${
map_name
}
has already been included."
else
local
map_image
=
if
[
"
${
TARGET_ARCH
}
"
=
"aarch64"
]
;
then
map_image
=
"
${
DOCKER_REPO
}
:map_volume-
${
map_name
}
-
${
TARGET_ARCH
}
-
${
map_version
}
"
else
map_image
=
"
${
DOCKER_REPO
}
:map_volume-
${
map_name
}
-
${
map_version
}
"
fi
info
"Load map
${
map_name
}
from image:
${
map_image
}
"
docker_restart_volume
"
${
map_volume
}
"
"
${
map_image
}
"
MAP_VOLUMES_CONF
=
"
${
MAP_VOLUMES_CONF
}
--volumes-from
${
map_volume
}
"
fi
}
function
mount_map_volumes
()
{
info
"Starting mounting map volumes ..."
if
[
-n
"
${
USER_SPECIFIED_MAPS
}
"
]
;
then
for
map_name
in
${
USER_SPECIFIED_MAPS
}
;
do
restart_map_volume_if_needed
"
${
map_name
}
"
"
${
VOLUME_VERSION
}
"
done
fi
if
[[
"
$FAST_MODE
"
==
"no"
]]
;
then
for
map_name
in
${
DEFAULT_MAPS
[@]
}
;
do
restart_map_volume_if_needed
"
${
map_name
}
"
"
${
VOLUME_VERSION
}
"
done
else
for
map_name
in
${
DEFAULT_TEST_MAPS
[@]
}
;
do
restart_map_volume_if_needed
"
${
map_name
}
"
"
${
VOLUME_VERSION
}
"
done
fi
}
function
mount_other_volumes
()
{
info
"Mount other volumes ..."
local
volume_conf
=
# AUDIO
local
audio_volume
=
"apollo_audio_volume_
${
USER
}
"
local
audio_image
=
"
${
DOCKER_REPO
}
:data_volume-audio_model-
${
TARGET_ARCH
}
-latest"
docker_restart_volume
"
${
audio_volume
}
"
"
${
audio_image
}
"
volume_conf
=
"
${
volume_conf
}
--volumes-from
${
audio_volume
}
"
# YOLOV4
local
yolov4_volume
=
"apollo_yolov4_volume_
${
USER
}
"
local
yolov4_image
=
"
${
DOCKER_REPO
}
:yolov4_volume-emergency_detection_model-
${
TARGET_ARCH
}
-latest"
docker_restart_volume
"
${
yolov4_volume
}
"
"
${
yolov4_image
}
"
volume_conf
=
"
${
volume_conf
}
--volumes-from
${
yolov4_volume
}
"
# FASTER_RCNN
local
faster_rcnn_volume
=
"apollo_faster_rcnn_volume_
${
USER
}
"
local
faster_rcnn_image
=
"
${
DOCKER_REPO
}
:faster_rcnn_volume-traffic_light_detection_model-
${
TARGET_ARCH
}
-latest"
docker_restart_volume
"
${
faster_rcnn_volume
}
"
"
${
faster_rcnn_image
}
"
volume_conf
=
"
${
volume_conf
}
--volumes-from
${
faster_rcnn_volume
}
"
# SMOKE
if
[[
"
${
TARGET_ARCH
}
"
==
"x86_64"
]]
;
then
local
smoke_volume
=
"apollo_smoke_volume_
${
USER
}
"
local
smoke_image
=
"
${
DOCKER_REPO
}
:smoke_volume-yolo_obstacle_detection_model-
${
TARGET_ARCH
}
-latest"
docker_restart_volume
"
${
smoke_volume
}
"
"
${
smoke_image
}
"
volume_conf
=
"
${
volume_conf
}
--volumes-from
${
smoke_volume
}
"
fi
OTHER_VOLUMES_CONF
=
"
${
volume_conf
}
"
}
function
post_run_setup
()
{
if
[
"
${
USER
}
"
!=
"root"
]
;
then
docker
exec
-u
root
"
${
APOLLO_RUNTIME
}
"
bash
-c
'/apollo/scripts/docker_start_user.sh'
fi
}
function
main
()
{
check_host_environment
parse_arguments
"
$@
"
determine_runtime_image
"
${
USER_VERSION_OPT
}
"
geo_specific_config
"
${
GEOLOC
}
"
if
[[
"
${
USE_LOCAL_IMAGE
}
"
-gt
0
]]
;
then
info
"Start Runtime container based on local image :
${
APOLLO_RUNTIME_IMAGE
}
"
fi
if
!
docker_pull
"
${
APOLLO_RUNTIME_IMAGE
}
"
;
then
error
"Failed to pull docker image
${
APOLLO_RUNTIME_IMAGE
}
"
exit
1
fi
info
"Check and remove existing Apollo Runtime container ..."
remove_existing_container
info
"Determine whether host GPU is available ..."
determine_gpu_use_host
info
"USE_GPU_HOST:
${
USE_GPU_HOST
}
"
local
local_volumes
=
setup_devices_and_mount_local_volumes local_volumes
# mount_map_volumes
# mount_other_volumes
info
"Starting docker container
\"
${
APOLLO_RUNTIME
}
\"
..."
local
local_host
=
"
$(
hostname
)
"
local
display
=
"
${
DISPLAY
:-
:0
}
"
local
user
=
"
${
USER
}
"
local
uid
=
"
$(
id
-u
)
"
local
group
=
"
$(
id
-g
-n
)
"
local
gid
=
"
$(
id
-g
)
"
set
-x
${
DOCKER_RUN
}
-itd
\
--privileged
\
--name
"
${
APOLLO_RUNTIME
}
"
\
-e
DISPLAY
=
"
${
display
}
"
\
-e
DOCKER_USER
=
"
${
user
}
"
\
-e
USER
=
"
${
user
}
"
\
-e
DOCKER_USER_ID
=
"
${
uid
}
"
\
-e
DOCKER_GRP
=
"
${
group
}
"
\
-e
DOCKER_GRP_ID
=
"
${
gid
}
"
\
-e
DOCKER_IMG
=
"
${
APOLLO_RUNTIME_IMAGE
}
"
\
-e
HOST_OS
=
"
${
HOST_OS
}
"
\
-e
USE_GPU_HOST
=
"
${
USE_GPU_HOST
}
"
\
-e
NVIDIA_VISIBLE_DEVICES
=
all
\
-e
NVIDIA_DRIVER_CAPABILITIES
=
compute,video,graphics,utility
\
${
local_volumes
}
\
--net
host
\
-w
/apollo
\
--add-host
"
${
PROD_INSIDE
}
:127.0.0.1"
\
--add-host
"
${
local_host
}
:127.0.0.1"
\
--hostname
"
${
PROD_INSIDE
}
"
\
--shm-size
"
${
SHM_SIZE
}
"
\
--pid
=
host
\
-v
/dev/null:/dev/raw1394
\
"
${
APOLLO_RUNTIME_IMAGE
}
"
\
/bin/bash
if
[
$?
-ne
0
]
;
then
error
"Failed to start docker container
\"
${
APOLLO_RUNTIME
}
\"
based on image:
${
APOLLO_RUNTIME_IMAGE
}
"
exit
1
fi
set
+x
post_run_setup
ok
"Congratulations! You have successfully finished setting up Apollo Runtime Environment."
ok
"To login into the newly created
${
APOLLO_RUNTIME
}
container, please run the following command:"
ok
" bash docker/scripts/runtime_into.sh"
ok
"Enjoy!"
}
main
"
$@
"
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录