Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Current implementation blocks any changes to the order in which nodes are opened in the tree updater. When a one hot encoded categorical split occurs, this information was not stored on the device. In order for the update position function to work correctly this information had been copied to the device beforehand inside the ApplySplit member function. Therefore the update position call had a dependence on the ApplySplit function for the same node being called directly before.
This PR changes the one hot encoding path to store categorical split information on the device in the same way as sort based splits, making it available on the device.
I changed the vectors storing this categorical split information for all nodes to expand when necessary instead of being initialised according to the maximum tree size. This prevents OOM in cases where the user specifies very deep trees which end up being sparse.