Как уменьшить или ускорить процесс перестроения при использовании онтологии шелест? - PullRequest
0 голосов
/ 14 апреля 2020

Есть несколько вещей, которые я не могу сделать из-за своей зависимости от онтологии-шороха:

  • cargo clippy требует, чтобы мои источники были новее, чем моя цель, или нет сообщать обо всем - так что он проходит через мои зависимости.
  • cargo tarpaulin хочет применить все через полную перестройку, даже если мне не нужна информация о покрытии для моих зависимостей (и при запуске он перезаписывает вещи в target/debug, тогда cargo build тоже хочет выполнить полное перестроение)
  • grcov не работает, потому что есть какой-то ящик -sys, который не может быть собран, поэтому я не могу получить покрытие кода из него.

Из-за этого сценария сборки и других зависимостей (я думаю, serde), cargo build занимает почти четыре минуты.

В идеале я бы сказал Cargo / Rust «это двоичный двоичный объект, просто используйте его» вместо сожаления каждый раз, когда я строю.

Я пытался:

  • определите, могу ли я упаковать двоичные файлы библиотеки и попросить Car go просто использовать их вместо восстановления.
  • Выполнить cargo build -p my_package, чтобы попросить Car go просто оставить все встроенное в target / и используйте его.
  • export OUT_DIR= за пределами цели / - я надеялся, что смогу исправить файл build.rs, чтобы просто скопировать предварительно собранные данные обучения на месте. Автомобиль go, похоже, не распознает мой OUT_DIR, и похоже, что пакет выполняет тяжелую работу во время сборки с выходными данными.
  • cargo vendor и пытается отсеять некоторые зависимости. Автомобиль go замечает, что я зациклен на продаваемом коде и по праву расстроен.
  • [patch."https://github.com/snipsco/rustling-ontology"] Я пытался раскрутить некоторые зависимости в локальной копии этого пакета, но другим пакетам нужны данные, которые я ' я отскочил, и в какой-то момент я понял, что это не сработает.
  • tar cvf cached-target.tar target/ и распакуйте правильный кеш, как мне это нужно. Это самое близкое к мне рабочее решение.
  • [ ОБНОВЛЕНО ] Используйте sccache, но кажется, что sccache достаточно «умен», чтобы требовать перестройки, так как есть build.rs связанный.

Я понимаю, что есть причины , почему в зависимости от предварительно скомпилированных библиотек может сломаться; но буквально это та же оболочка в том же каталоге на том же ноутбуке, с тем же временем загрузки системы, что и во всех предыдущих сборках, которые я делал; есть ли выпускной клапан для этого?

Я использую Rust 1.44.0-nightly 2020-04-09

cargo tree соответствующих зависимостей (обсуждение следует далее):

my_example_app v0.1.0
├── snips-nlu-lib v0.65.6 (git+https://github.com/snipsco/snips-nlu-rs#88a047aacf40f3316a9cbdde850ea1798af39c2a)
    <some dependencies cut>
│   ├── base64 v0.10.1
│   ├── serde v1.0.106 (*)
│   ├── serde_json v1.0.51 (*)
│   ├── snips-nlu-ontology v0.67.1 (git+https://github.com/snipsco/snips-nlu-ontology?tag=0.67.1#194f99d87fa506ef1175b7dce70841c389940a29)
│   │   ├── failure v0.1.7 (*)
│   │   ├── serde v1.0.106 (*)
│   │   ├── serde_derive v1.0.106 (*)
│   │   └── serde_json v1.0.51 (*)
│   ├── snips-nlu-parsers v0.4.3 (git+https://github.com/snipsco/snips-nlu-parsers?tag=0.4.3#8cfdae50437732fcf906af90626c8db196729d30)
│   │   ├── failure v0.1.7 (*)
│   │   ├── gazetteer-entity-parser v0.8.0 (git+https://github.com/snipsco/gazetteer-entity-parser?tag=0.8.0#0e117818081782d1f295376f4cb3e1bb084e397c)
│   │   │   ├── failure v0.1.7 (*)
│   │   │   ├── fnv v1.0.6 (*)
│   │   │   ├── rmp-serde v0.13.7
│   │   │   │   ├── byteorder v1.3.4 (*)
│   │   │   │   ├── rmp v0.8.9
│   │   │   │   │   ├── byteorder v1.3.4 (*)
│   │   │   │   │   └── num-traits v0.2.11 (*)
│   │   │   │   └── serde v1.0.106 (*)
│   │   │   ├── serde v1.0.106 (*)
│   │   │   └── serde_json v1.0.51 (*)
│   │   ├── itertools v0.8.2 (*)
│   │   ├── lazy_static v1.4.0 (*)
│   │   ├── regex v1.3.6 (*)
│   │   ├── rustling-ontology v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   ├── rmp-serde v0.14.3
│   │   │   │   ├── byteorder v1.3.4 (*)
│   │   │   │   ├── rmp v0.8.9 (*)
│   │   │   │   └── serde v1.0.106 (*)
│   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892)
│   │   │   │   ├── failure v0.1.7 (*)
│   │   │   │   ├── fnv v1.0.6 (*)
│   │   │   │   ├── rustling-core v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892)
│   │   │   │   │   ├── failure v0.1.7 (*)
│   │   │   │   │   ├── regex v1.3.6 (*)
│   │   │   │   │   ├── serde v1.0.106 (*)
│   │   │   │   │   ├── smallvec v0.6.13 (*)
│   │   │   │   │   └── string-interner v0.7.1
│   │   │   │   │       └── serde v1.0.106 (*)
│   │   │   │   ├── rustling-ml v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892)
│   │   │   │   │   ├── failure v0.1.7 (*)
│   │   │   │   │   ├── fnv v1.0.6 (*)
│   │   │   │   │   └── serde v1.0.106 (*)
│   │   │   │   └── serde v1.0.106 (*)
│   │   │   ├── rustling-ontology-grammar v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   ├── rustling-ontology-de v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   │   ├── chrono v0.4.8 (*)
│   │   │   │   │   │   ├── derive-new v0.5.8
│   │   │   │   │   │   │   ├── proc-macro2 v1.0.10 (*)
│   │   │   │   │   │   │   ├── quote v1.0.3 (*)
│   │   │   │   │   │   │   └── syn v1.0.17 (*)
│   │   │   │   │   │   ├── enum_primitive v0.1.1
│   │   │   │   │   │   │   └── num-traits v0.1.43
│   │   │   │   │   │   │       └── num-traits v0.2.11 (*)
│   │   │   │   │   │   ├── failure v0.1.7 (*)
│   │   │   │   │   │   └── vec_map v0.8.1 (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │       ├── failure v0.1.7 (*)
│   │   │   │   │       ├── log v0.4.8 (*)
│   │   │   │   │       ├── regex v1.3.6 (*)
│   │   │   │   │       ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │       └── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-en v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-es v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-fr v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-it v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-ja v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── regex v1.3.6 (*)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-ko v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── failure v0.1.7 (*)
│   │   │   │   │   ├── regex v1.3.6 (*)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-pt v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   │   └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   ├── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │   └── rustling-ontology-zh v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0)
│   │   │   │       ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   │       ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   │       └── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   ├── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   └── serde v1.0.106 (*)
│   │   │   [build-dependencies]
│   │   │   ├── rmp-serde v0.14.3 (*)
│   │   │   ├── rustling v0.9.1 (git+https://github.com/snipsco/rustling?tag=0.9.1#758074a27c339fa9e0cd477baee1f378fd0c2892) (*)
│   │   │   ├── rustling-ontology-grammar v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   ├── rustling-ontology-moment v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   ├── rustling-ontology-values v0.19.3 (git+https://github.com/snipsco/rustling-ontology?tag=0.19.3#3bb1313de543aa2a8027da9fc11c435db0cce8c0) (*)
│   │   │   └── serde v1.0.106 (*)
<more dependencies cut>

rustling-ontology вводит rustling-ontology-grammar, затем ряд языковых спецификаций c ящиков. Ящик имеет build.rs, который обучает языковой модели для каждого из доступных языков. Я полагаю , что затем берет вывод этого и использует serde для генерации реального кода Rust, который компилируется во время сборки. Один этот процесс занимает несколько минут и имеет ряд зависимостей * -sys.

Проблемы:

  1. grcov не работает с некоторыми из зависимостей sys в rustling-ontology; это дает мне ошибки при компиляции C кода. Я уверен, что я мог бы go писать в GitHub, но правда в том, что я не хочу, чтобы grcov охватывал что-либо, связанное с rustling-ontology (или любым из этих поддеревьев пакетов).

  2. cargo tarpaulin / cargo build / cargo build --release / cargo clippy. Clippy требует полной перестройки (из-за ошибок) для предоставления полезной информации. Поскольку я не собираюсь устранять какие-либо проблемы с ворсом, я не хочу, чтобы Clippy набрал от go до rustling-ontology, и мне придется ждать несколько минут, пока он переобучится и снова будет работать. Брезент также полностью перестраивает, и кажется, что он иногда пересекает провода с отладочной сборкой, поэтому простое получение кода на модульных тестах занимает минуты. Использование -p для охвата определенного пакета c не помогает.

Воспроизведение

Вы заметите, что rustling-ontology требуется довольно много времени для сборки, если вы запустите:

$ git clone https://github.com/snipsco/snips-nlu-rs
$ cd snips-nlu-rs
$ cargo run --example interactive_parsing_cli data/tests/models/nlu_engine

Я думаю, в двух словах, я хотел бы, чтобы некоторые библиотечные зависимости вводились только как предварительно скомпилированные двоичные файлы в мой исполняемый файл.

1 Ответ

0 голосов
/ 18 апреля 2020

В настоящее время нет способа ускорить работу, которая бы работала так, как построена шелест-онтология.

Если вы наткнулись на это в поисках способов «сделать ваш цикл разработки короче», то я рекомендую взглянуть на sccache, который оказал наилучшее влияние, но, в частности, не кешировал бы онтологию шороха. .

...