[ 
https://issues.apache.org/jira/browse/OPENNLP-1556?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17843533#comment-17843533
 ] 

ASF GitHub Bot commented on OPENNLP-1556:
-----------------------------------------

mawiesne opened a new pull request, #600:
URL: https://github.com/apache/opennlp/pull/600

   Change
   -
   - adjusts TwoPassDataIndexer to make use of JDK's built-in 
`CheckedOutputStream` / `CheckedInputStream` for checksum 
([CRC32c](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/zip/CRC32C.html))
 computations
   - removes untested class `HashSumEventStream` which is just a wrapper for 
calling a slow toString() in Event to get some bytes to use for the computation 
of a checksum
   - provides a HashSumEventStream replacement: `ChecksumEventStream` which 
makes use of the faster CRC32c checksum computation, avoiding cryptographic 
hash functions such as MD5
   - adds JUnit tests for ChecksumEventStream
   
   Note(s)
   -
   1. A _full_ OpenNLP build is consistently about 3-4s faster on my local 
machine (61s vs. 57s => ~ -7%) . 
   2. The effect should be greater when processing large(r) training corpora. 
   3. We should see a difference in a bare metal EVAL build run.
   
   Tasks
   -
   Thank you for contributing to Apache OpenNLP.
   
   In order to streamline the review of the contribution we ask you
   to ensure the following steps have been taken:
   
   ### For all changes:
   - [x] Is there a JIRA ticket associated with this PR? Is it referenced 
        in the commit message?
   
   - [x] Does your PR title start with OPENNLP-XXXX where XXXX is the JIRA 
number you are trying to resolve? Pay particular attention to the hyphen "-" 
character.
   
   - [x] Has your PR been rebased against the latest commit within the target 
branch (typically main)?
   
   - [x] Is your initial contribution a single, squashed commit?
   
   ### For code changes:
   - [x] Have you ensured that the full suite of tests is executed via mvn 
clean install at the root opennlp folder?
   - [x] Have you written or updated unit tests to verify your changes?
   - [ ] If adding new dependencies to the code, are these dependencies 
licensed in a way that is compatible for inclusion under [ASF 
2.0](http://www.apache.org/legal/resolved.html#category-a)? 
   - [ ] If applicable, have you updated the LICENSE file, including the main 
LICENSE file in opennlp folder?
   - [ ] If applicable, have you updated the NOTICE file, including the main 
NOTICE file found in opennlp folder?
   
   ### For documentation related changes:
   - [ ] Have you ensured that format looks appropriate for the output in which 
it is rendered?
   
   ### Note:
   Please ensure that once the PR is submitted, you check GitHub Actions for 
build issues and submit an update to your PR as soon as possible.
   




> Improve speed of checksum computation in TwoPassDataIndexer
> -----------------------------------------------------------
>
>                 Key: OPENNLP-1556
>                 URL: https://issues.apache.org/jira/browse/OPENNLP-1556
>             Project: OpenNLP
>          Issue Type: Improvement
>          Components: Machine Learning
>    Affects Versions: 1.9.0, 2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.3.1, 2.3.2, 2.3.3
>            Reporter: Martin Wiesner
>            Assignee: Martin Wiesner
>            Priority: Major
>             Fix For: 2.3.4
>
>
> For training ML models, all observations (Events) are indexed via 
> {{TwoPassDataIndexer#index(ObjectStream<Event> eventStream)}}. 
> When #index(..) is run, a tmp file is written and read in again. For the 
> purpose of checksum validation, instances of HashSumEventStream are used to 
> validate the content processed. 
> Based on a rather slow toString() implementation in Event, a cryptographic 
> (MD5) message digest is computed. This, however, is much slower than simply 
> computing a checksum (such as a CRC32c value) for both directions 
> (write/read). The (slowing) effect is more problematic when larger training 
> corpora are (pre-)processed, that is, indexed in advance. 
> Aims:
> - Speedup the (IO-bound) indexing part prior to the actual CPU-bound training 
> phase.
> - Switch from MD5 to CRC32c, as there is *no* need for a cryptographic hash 
> function here; it's simply a checksum that is required to decide whether all 
> bytes written are the same bytes that are read.
> - Remove the untested class HashSumEventStream which is just a wrapper for 
> calling a slow toString() in Event to get some bytes to use for the 
> computation of a checksum / md.
> - Provide a replacement for HashSumEventStream, e.g. ChecksumEventStream that 
> makes use of the faster CRC32c checksum computation, avoiding cryptographic 
> hash functions such as MD5.
> - Make sure all existing tests hold.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to