— обновлено 20 сентября 2021 г., используйте Vmware вместо VirutalBox.
Пошаговое развертывание Cervical AI на Jetson AGX Xavier
Этот пост является 2-м из Предыдущих серий.
После установки ОС + файловой системы на Jetson теперь нам нужно поработать над приложением Cervical AI. Он состоит из двух частей:
- Веб-интерфейс + база данных (имя Docker: mysql_cervical)
- Шейный ИИ, сегмент клетки + предсказание положительного/отрицательного результата (имя Докера: цервикальный)
Примечание. Из-за того, что Jetson имеет только 16 ГБ памяти, мы не сможем построить наш докер на Jetson. Итак, мы будем создавать образ докера на VirtualBox.
Для хранения данных мы можем добавить к Jetson жесткий диск через USB.
- Подключите хард к USB Jetson. В лучшем случае мы использовали два раздела (/dev/sda1 для докеров; /dev/sda2/ для данных). Выполните следующую команду:
gnome-disks
- Остановить текущую службу докеров
sudo systemctl stop docker.socket
sudo systemctl stop docker.service
- Смонтируйте раздел Docker и запустите службу Docker.
$ sudo mount /dev/sda1 /var/lib/docker
$ sudo systemctl start docker.service
- Смонтируйте раздел данных
sudo mkdir /data
sudo chmod 777 /data
sudo mount /dev/sda2 /data
- Для автоматического монтирования после перезагрузки добавьте следующие строки в /etc/fstab
/dev/sda1 /var/lib/docker ext4 defaults 0 1
/dev/sda2 /data ext4 defaults 0 1
Подготовка рабочих каталогов.
mkdir -p /data/datadir/thumbor/data/loader/cache
mkdir -p /data/datadir/thumbor/data/loader/csv
mkdir -p /data/datadir/thumbor/data/loader/datasets
mkdir -p /data/datadir/thumbor/data/loader/img
mkdir -p /data/datadir/thumbor/data/loader/modules/classifier
mkdir -p /data/datadir/thumbor/data/loader/modules/detector
mkdir -p /data/datadir/thumbor/data/loader/projects
mkdir -p /data/datadir/thumbor/data/loader/scratch
tree /data/datadir
/data/datadir
└── thumbor
└── data
└── loader
├── cache
├── csv
├── datasets
├── img
├── modules
│ ├── classifier
│ └── detector
├── projects
└── scratch
Создание базы данных
- База данных с использованием biarms/mysql:5.7.30-linux-arm64v8 в качестве образа докера
sudo apt-get install docker-compose
git clone https://github.com/paulxiong/cervical.gitcd cervical.git/webpage/1_api_server mkdir datadir sudo docker-compose -f docker-compose-armv8.yml up
- Чтобы проверить работоспособность базы данных, введите следующую команду:
mysql -u mysql -p123456 -P 3309 -h 127.0.0.1 -b datasets mysql> show tables; +--------------------+ | Tables_in_datasets | +--------------------+ | c_category | | c_dataset | | c_email | | c_errorlog | | c_image | | c_label | | c_label2 | | c_model | | c_operationlog | | c_predict | | c_project | | c_region | | c_result | | c_review | | c_syscfg | | c_token | | c_user | | c_user_type | +--------------------+ 18 rows in set (0.00 sec)
mysql> select * from c_user;
Сделать образ веб-сервера-докера.
Выполните это задание на VirtualBox,из-зау Джетсона ограничена только оперативная память.
В VmWare Fusion (бесплатно для использования с открытым исходным кодом) в Mac OS:
- Установите GCC.
sudo apt update sudo apt install build-essential
- Установите Golange, go 1.13 работает хорошо, go1.11 не будет работать.
cd /tmp wget https://dl.google.com/go/go1.13.3.linux-amd64.tar.gz (if your vm is i386, need to do: wget https://dl.google.com/go/go1.13.3.linux-386.tar.gz) sudo tar -xvf go1.13.3.linux-amd64.tar.gz (if your vm is i386, need to do:sudo tar -xvf //go1.13.3.linux-386.tar.gz) sudo mv go /usr/local vim ~/.bashrc (add following lines to the bottom:) export GOROOT=/usr/local/go export GOPATH=$HOME/go export PATH=$GOPATH/bin:$GOROOT/bin:$PATH
- Установить свэг:
go get -u github.com/swaggo/swag/cmd/swag
Примечание: swag будет установлен в $GOPAHT/bin; если GOPATH не существует, он будет установлен в $HOME/go/bin, вам также необходимо добавить $HOME/go/bin в ~/.bushrc.
- Установите nodejs и npm:
$ sudo apt install curl $ curl -sL https://deb.nodesource.com/setup_12.x | sudo -E bash - $ sudo apt-get install -y nodejs
- Создайте окончательный файл release.zip (содержимое веб-сервера Vue) и скопируйте release.zip в Jetson (при условии, что его IP-адрес — 192.168.1.74):
>git clone https://user:[email protected]/paulxiong/cervical
(replace user:password with your git access. if you already setup ssh, you can git clone ssh://github.com/paulxiong/cervical.git)
>cd cervical/webpage/2_api_server/
>./run3.sh
На Джетсон Бокс
- создайте образ докера:
cd cervical.git/webpage/2_api_server
docker build -t paulxiong/cervical:11252020 -f Dockerfile.armv8 .
- Согласованно измените docker-compose.yml:
vim docker-compose.yml
edit following lines:
image : paulxiong/cervical:11252020
MYSQL_HOST : 192.168.1.74
volumes:
— /data/datadir/thumbor/data/loader/scratch:/data/scratch
— /data/datadir/thumbor/data/loader/datasets:/data/datasets
— /data/datadir/thumbor/data/loader/projects:/data/projects
— /data/datadir/thumbor/data/loader/csv:/data/csv
— /data/datadir/thumbor/data/loader/img:/data/img
— /data/datadir/thumbor/data/loader/cache:/data/cache
— /data/datadir:/ai
Затем выполните команды:
wget https://github.com/lionsoul2014/ip2region/blob/master/data/ip2region.db
docker-compose up -d
Теперь вы должны иметь доступ к веб-странице по адресу 192.168.0.1:9002.
Сделайте сегментацию ячейки
В поле Jetson выполните следующую команду
cd cervical/segmentation_Mask_RCNN
./2_build_docker_image_armv8.sh
Когда закончите, это будет выглядеть как следующий экран, который займет несколько часов:
Successfully tagged cervical:crop_mr_2020062523449
запустить с изменением:
- -e WEBURL на ваш-локальный-ip
- -v /data/datadir:/ai в ваш-datadir, если вы выбрали другой во время «подготовки рабочих каталогов»
- шейка:crop_mr_xxx вам построили выше.
docker run -d --name="cervical_crop" \
--log-opt max-size=100m \
-v /data/datadir:/ai \
-e WEBURL='http://192.168.1.160:9002' \
-e ROOTDIR='/ai/thumbor/data/loader' \
-e PYTHONUNBUFFERED=0 \
--device /dev/nvhost-as-gpu \
--device /dev/nvhost-ctrl \
--device /dev/nvhost-ctrl-gpu \
--device /dev/nvhost-ctxsw-gpu \
--device /dev/nvhost-dbg-gpu \
--device /dev/nvhost-gpu \
--device /dev/nvhost-prof-gpu \
--device /dev/nvhost-sched-gpu \
--device /dev/nvhost-tsg-gpu \
--device /dev/nvmap \
cervical:crop_mr_2020061411454 python3 main_SDK.py
На данный момент мы должны увидеть следующие 3 докера в рабочем состоянии:
Сделать предсказание ячейки
cd cervical.git/howtoMala
./2_build_docker_image_armv8.sh
это займет еще час, чтобы закончить.
Successfully built 3badb46776ea Successfully tagged cervical:mala_2020062671855
Запустить с изменением:
- -e WEBURL на ваш-локальный-ip
- -v /data/datadir:/ai в ваш-datadir, если вы выбрали другой во время «подготовки рабочих каталогов»
- шейка: mala_xxx вам построили выше.
docker run -d --name="cervical_mala" \
--log-opt max-size=100m \
-v /data/datadir:/ai \
-e WEBURL='http://192.168.1.160:9002' \
-e ROOTDIR='/ai/thumbor/data/loader' \
-e PYTHONUNBUFFERED=0 \
--device /dev/nvhost-as-gpu \
--device /dev/nvhost-ctrl \
--device /dev/nvhost-ctrl-gpu \
--device /dev/nvhost-ctxsw-gpu \
--device /dev/nvhost-dbg-gpu \
--device /dev/nvhost-gpu \
--device /dev/nvhost-prof-gpu \
--device /dev/nvhost-sched-gpu \
--device /dev/nvhost-tsg-gpu \
--device /dev/nvmap \
cervical:mala_20191230145851 python3 main_SDK.py
Проверяем, должно быть четыре докера:
Завершенный. В следующем посте мы покажем, как
- загрузить изображение шейки матки;
- сегментировать его на ячейки;
- сделать прогноз