— обновлено 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.git
cd 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

Проверяем, должно быть четыре докера:

Завершенный. В следующем посте мы покажем, как

  1. загрузить изображение шейки матки;
  2. сегментировать его на ячейки;
  3. сделать прогноз